2010-10-18 57 views
4
$fooValue = 100.68; 
$cowValue = 100.67; 

$diffValue = $fooValue - $cowValue; 
if($diffValue <= 0.01) { 
    echo("success"); 
} else { 
    echo("error"); 
} 

這將顯示「錯誤」。PHP float的準確性計算

我知道該怎麼做在Java中。但我不擅長PHP,特別是在計算這些東西時。

請幫我一把。我的意思是如何成功呢?

+0

如果您不確定'$ fooValue'總是兩者中最大的,請記住['abs()'](http://php.net/manual/en/function.abs.php)。但是,您的問題似乎是您的epsilon太小,因此浮點值表示會導致錯誤的結果。 – jensgram 2010-10-18 09:07:41

+3

由於浮點表示,'$ diffValue'等於'0.010000000000005';這不是特別的PHP。 – poke 2010-10-18 09:07:57

回答

6

浮點數是一種不精確的數據類型(因爲所有浮點數據類型都是這樣),因爲當轉換爲二進制數據或從二進制數據轉換時可能會失去精度。這就是爲什麼當你需要高準確度時你不應該使用浮點運算。

在PHP中,請查看BC MathGMP庫。後者只能使用整數,但它具有很高的性能,有時可以在不損失精度的情況下將整數轉換爲整數。

+0

非常感謝你 – Deckard 2010-10-18 09:06:48

+0

而不是感謝你,如果你得到的結果接受答案,並放棄投票給他。 – svk 2010-10-18 09:08:38

+0

對不起。我需要5分鐘才能接受答案 – Deckard 2010-10-18 09:10:03