How to Fix Perl Rounding Errors

Consider the following program:

$x=12345678901.234567000;
$y=($x-int($x))*1000000000;
printf("%f:%f\n",$x,$y);

Here is what prints:

12345678901.234568:234567642.211914

I expected:

12345678901.234567:234567000

This is similar to the rounding problem in Perl.
How can I change it to get 234567000instead?
Did I do something wrong?

+3
source share
5 answers

Make "use bignum ;" first line of your program.

, - . , . , , "bignum". , , , .

, , , . .

+5

.

(, 19.9499999999999) , (, 19.95)?

, . ( ) . . , , Perl.

perlnumber . , printf sprintf. . .

printf "%.2f", 10/3;
my $number = sprintf "%.2f", 10/3;
+6

, , bignum. ? printf. bignum - . , . , bignum Perl , printf C. %f .

print, . .

, , Perl -Duse64bitint -Duselongdouble, Perl 64- long double . , (bignum - hog ). 100% , bignum, , printf. Perl , . , Perl (/usr/local/perl/64bit - ), Perl, .

+3

(Googlework?) : , ?

, , , ( ). $x 8.

$x - (int($x) - 0.23456linenoise, . 1000000000, , , .

+2

Perl . , $x . , :

$ perl -e 'printf "%.10f", 12345678901.234567000'
12345678901.2345676422
+1
source

Source: https://habr.com/ru/post/1754322/


All Articles