#!/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