2012-05-16 60 views
2

擴展它在JavaScript這個數學運算的回報:php的位精度如何

1913397/13.054 = 146575.53240386088 

,但同樣的操作在PHP的回報:

1913397/13.054 = 146575.53240386 

我想這是由於四捨五入。

如何擴展php的精度?

回答

2

an article I wrote for Authorize.Net

一加一等於二,對吧?怎麼樣.2加1.4次10?那等於16,對嗎?若你正在做與PHP(或大多數其他編程語言)數學:

echo floor((0.2 + 1.4) * 10); // Should be 16. But it's 15! 

這是由於點如何浮點數的內部處理。它們以固定的小數位數表示,並且可能會導致數字與您預期的不相符。在我們的內部,我們的.2加1.4倍10個例子的計算大致爲15.9999999998左右。使用不需要精確到百分比的數字時,這種數學方法很好。但是,當處理金錢精確性問題時,如果一分錢或者一美元在這裏或者那裏失蹤,就會很快加起來,而且沒有人喜歡在缺少資金的情況下進行短期融資。

的BC數學解

好在PHP提供BC Math extension這是「爲任意精度數學PHP提供支持的任何尺寸和精度,表示爲字符串的號碼二進制計算器」。換句話說,你可以用這個擴展名用貨幣值做精確的數學運算。 BC Math extension contains function s允許您以精確度執行最常見的操作,包括addition,subtraction,multiplicationdivision

一個更好的例子

下面是同樣的例子以上,但使用bcadd()函數來算一算我們。它需要三個參數。前兩個是我們希望添加的值,第三個是我們希望精確到的小數位數。由於我們正在使用金錢,因此我們將精確度設置爲兩位十進制數。

echo floor(bcadd('0.2', '1.4', 2) * 10); // It's 16 like we would expect it to be. 
+0

我建議使用比BC Math更快的GMP。 –