2013-05-06 36 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