2011-11-29 127 views
0

我有這樣的例子PHP和浮點數

 
$x = 0.154 + 0.408; 
$y = 0.562; 
echo $x - $y; 

你可能會認爲它是0,但它不是(那也許是因爲它取決於你的系統和PHP版本上)。 無論如何,對於那些看不到0的人來說,做浮動操作的正確方法是什麼?

+0

你得到的輸出是什麼? – thwd

+0

您可能想閱讀「每位計算機科學家應該瞭解的浮點運算」。 (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)以獲取完整的血統細節。 –

+0

第100500個這樣的問題,沒有人關心首先搜索 –

回答

2
$x = bcadd (0.154 ,0.408); 
$y = 0.562; 
echo bcsub($x,$y); 
+0

如果你有額外的庫安裝...,並且你需要在最後的精度 – danidacar

+0

自PHP 4.0.4以來,libbcmath被捆綁與PHP。這個擴展你不需要任何外部庫。 – Oyeme

+0

對不起,這個遲到的警告,但這個例子是明顯錯誤的,它出於錯誤的原因!如果將0.562更改爲0.1,它仍然會返回0,因爲'bcsub()'的精度爲0小數點。更糟的是,在你的例子中'$ x'將爲0。如果你要寫'bcsub($ x,$ y,18)',你將會遇到與浮點數相同的問題。你不能用一個庫來解決這個問題,你必須理解浮點運算。 – martinstoeckli

0

它實際上與PHP本身無關,這就是計算機的工作方式 - 有些數字無法精確重新表示,因此您必須記住,當您使用浮動和雙精度工作時,可以使用數字近似值

你可以閱讀更多關於浮點在谷歌:floating point arithmetic

0

你真的應該明白的問題(沒有圖書館,可神奇地解決這一問題,PHP是你所需要的)。

你可以在這裏找到

一篇很好的文章,它的實際寫入德爾福,但問題是不特定於任何語言: Comparing floating point values

請仔細閱讀在PHP的documenation警告: Floating point precision