#!/usr/bin/perl
$test = 1.30733;
$test = int($test * 100000);
print "test : " , $test ;
结果 测试:130732为什么perl不能正确地乘以十进制数?
有人能告诉我为什么吗?
#!/usr/bin/perl
$test = 1.30733;
$test = int($test * 100000);
print "test : " , $test ;
结果 测试:130732为什么perl不能正确地乘以十进制数?
有人能告诉我为什么吗?
130733/100000是二进制的周期数,就像1/3是十进制的周期数。这将需要无限存储来将其存储为浮点数。
它实际上存储的东西比130733/100000少一些。
在输出浮点数时总是使用舍入,并且在比较时总是使用容差。
这就是我最终做的。计算后舍入所有数字。 – Gsuz 2013-05-07 18:57:12
如果你跳过INT()的Perl将DWIM这里:
> $x * 100000
130733
这是一个浮点问题。 1.30733实际上是1.03732999999999999999或类似的内部。 – 2013-05-06 17:39:45
你可以用管道把它换成'bc'吗? – 2013-05-06 17:40:38
在文件顶部添加'use bignum;'。可能阅读[这个Perl常见问题解答条目](http://perldoc.perl.org/perlfaq4.html#Why-am-I-getting-long-decimals-(例如%2c-19.9499999999999) - 数字的边界-I-should-getting-getting-(例如%2c-19.95)%3f) – Andomar 2013-05-06 17:42:27