Counting the number of decimal places in pascal

后端 未结 3 1579
南方客
南方客 2021-01-15 19:40

I just started studying pascal and I have to do a pascal program as homework. I made it but I don\'t know how to count the number of decimal places in a real number<

相关标签:
3条回答
  • 2021-01-15 20:37

    The Format() function is normally used in situations like this.

    WriteLn(Format('%*.*f', [0, dec, your_real_number]));
    

    *.* is interpreted as total_characters.decimal_digits. Passing zero for the first means that width is adjusted according to how large your real is. The number of decimals can be a variable (dec), which you can adjust to your specification.


    Update:

    You mention that you want an exact representation of a float with respect to the number of decimals.

    As mentioned in my comment, most floating point values does not have a finite number of decimals. And most decimal fractions cannot be represented by a binary type.

    There are some libraries that can handle floating point values of arbitrary size. See TBigFloat for example. There is a formatting routine that can strip redundant zeroes from a decimal float.


    Still, there is a possibility to remove trailing zeroes by using the general format specifier:

    WriteLn(Format('%g',[your_real_number]));
    

    You can specify the width and the number of significant digits as well.

    0 讨论(0)
  • 2021-01-15 20:38

    For example, if you have input x=1.51 in real variable type, then you write only writeln(x), the output will be 1.5100000000. If you write writeln(x:0:3), the output will be 1.510 (3 digits after ".") ...

    var x: real;
    Begin
    x:=1.51;
    writeln(x); //output 1.5100000000
    writeln(x:0:4); //output 1.5100 (4 digits after ".")
    writeln(x:0:2); //output 1.51 (2 digits after ".")
    readln;
    End.
    

    From your other example, if your input is 1.512426, with writeln(x:0:5) it will only show 5 digits after "." and the output will be 1.51242

    var x: real;
    Begin
    x:=1.512426;
    writeln(x); //output 1.5124260000
    writeln(x:0:4); //output 1.5124 (4 digits after ".")
    writeln(x:0:2); //output 1.51 (2 digits after ".")
    readln;
    End. 
    

    So, if you write writeln(x:0:dec) the output will be "dec" digits after "."

    Hope this helps, I'm just trying to answer from a different perspective.

    0 讨论(0)
  • 2021-01-15 20:38

    if you're actually doing a writeln() output, surely just writeln(x); would accomplish what you're after? If you actually want to count the number of decimals, you'd probably have to convert to a string, remove any trailing zeroes, and see where the decimal point landed.

    0 讨论(0)
提交回复
热议问题