2012-02-08 30 views
-1

可能重複:
Floating point inaccuracy examples
PHP rounding issue - Is this a bug?PHP的錯誤?當我從x.02減去x.01,其中x> = 64我得到0.00999999999999

發現了可能是在PHP中的錯誤,但我想檢查一下,看看這只是一些奇怪的計算或某人已經知道的事情。

一個例子:

$available = 64.02; 
$spent = 64.01; 
$available -= $spent; 
print $available."<br />"; 

我期望的結果是0.01,對不對?但是,我得到0.00999999999999。

如果你對小於64的任何整數(例如:45.02 - 45.01)這樣做,我會得到正確的0.01結果。然而,任何大於或等於64的東西都會給我0.00999999999999。

我已經在PHP 5.2.17和PHP 5.2.12中測試過。試圖谷歌它,但找不到任何東西。任何人都可以解釋這個問題嗎?

+4

這不是一個錯誤,它是[浮點數](http://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples)數字的預期行爲。可能重複的[PHP舍入問題 - 這是一個錯誤嗎?](http://stackoverflow.com/questions/6441548/php-rounding-issue-is-this-a-bug) – meagar 2012-02-08 23:04:41

+1

不要讓我們發射到一個討論如何.00999999 ... = .01 ;-) – Tim 2012-02-08 23:08:54

回答

1

這是典型的浮點運算。這些數字以二進制形式存儲,並不總是以二進制形式表示每個數字。當您嘗試表示1/3時,可能會觀察到同樣的問題,並且最終得到的是無限制的十進制序列,而在三倍的基數中表示的相同數字將具有有限序列。

這應該不是一個大問題,反正0.00999999999999只是0.00000000000001不同於0.01

+0

謝謝。這不是一個大問題,只是將結果數字四捨五入,但我很好奇它的原因。我認爲這可能是一個原因,我找不到一個(谷歌並不知道該怎麼做「.02 - .01等於0.00999999999999在PHP中」)。 – Charlie 2012-02-09 00:19:29

相關問題