擴展它在JavaScript這個數學運算的回報:php的位精度如何
1913397/13.054 = 146575.53240386088
,但同樣的操作在PHP的回報:
1913397/13.054 = 146575.53240386
我想這是由於四捨五入。
如何擴展php的精度?
擴展它在JavaScript這個數學運算的回報:php的位精度如何
1913397/13.054 = 146575.53240386088
,但同樣的操作在PHP的回報:
1913397/13.054 = 146575.53240386
我想這是由於四捨五入。
如何擴展php的精度?
從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,multiplication和division。
一個更好的例子
下面是同樣的例子以上,但使用bcadd()函數來算一算我們。它需要三個參數。前兩個是我們希望添加的值,第三個是我們希望精確到的小數位數。由於我們正在使用金錢,因此我們將精確度設置爲兩位十進制數。
echo floor(bcadd('0.2', '1.4', 2) * 10); // It's 16 like we would expect it to be.
我建議使用比BC Math更快的GMP。 –