平時在做開發(fā)的時候,會遇到計算結(jié)果出錯的問題,明明計算的方法正確,但結(jié)果不對。
比如0.58*100,得到的是57.99999999999999,而不是58
出現(xiàn)這種情況,并不是PHP的bug,而是二進(jìn)制浮點(diǎn)計算的問題,各種語言都存在這個問題。
具體原理自行搜索,這里就不細(xì)講,下面列出PHP這邊的解決方案,使用高精度函數(shù)
????????bcadd — 將兩個高精度數(shù)字相加
bccomp — 比較兩個高精度數(shù)字,返回-1, 0, 1
bcdiv — 將兩個高精度數(shù)字相除
bcmod — 求高精度數(shù)字余數(shù)
bcmul — 將兩個高精度數(shù)字相乘
bcpow — 求高精度數(shù)字乘方
bcpowmod — 求高精度數(shù)字乘方求模,數(shù)論里非常常用
bcscale — 配置默認(rèn)小數(shù)點(diǎn)位數(shù),相當(dāng)于就是Linux bc中的”scale=”
bcsqrt — 求高精度數(shù)字平方根
bcsub — 將兩個高精度數(shù)字相減