2013-05-06 66 views
-1
#!/usr/bin/perl 

$test = 1.30733; 
$test = int($test * 100000); 
print "test : " , $test ; 

结果 测试:130732为什么perl不能正确地乘以十进制数?

有人能告诉我为什么吗?

+4

这是一个浮点问题。 1.30733实际上是1.03732999999999999999或类似的内部。 – 2013-05-06 17:39:45

+0

你可以用管道把它换成'bc'吗? – 2013-05-06 17:40:38

+4

在文件顶部添加'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

回答

0

130733/100000是二进制的周期数,就像1/3是十进制的周期数。这将需要无限存储来将其存储为浮点数。

它实际上存储的东西比130733/100000少一些。

在输出浮点数时总是使用舍入,并且在比较时总是使用容差。

+0

这就是我最终做的。计算后舍入所有数字。 – Gsuz 2013-05-07 18:57:12

0

如果你跳过INT()的Perl将DWIM这里:

> $x * 100000 
130733 
相关问题