根據結果說明,作為浮點型數據,其精度已經損失了一部分,達不到完全精確。所以永遠不要相信浮點數結果精確到了最后一位,也永遠不要比較兩個浮點數是否相等。
需要說明的是,這不是 PHP 的 問題,而是計算機內部處理浮點數的問題!在 C、JAVA 等語言中也會遇到同樣的問題。
解決方法:需要將其控制在我們需要的精度范圍內再行比較。
比如 bc 函數:
bcadd — 將兩個高精度數字相加
bccomp — 比較兩個高精度數字,返回-1, 0, 1
bcdiv — 將兩個高精度數字相除
bcmod — 求高精度數字余數
bcmul — 將兩個高精度數字相乘
bcpow — 求高精度數字乘方
bcpowmod — 求高精度數字乘方求模,數論里非常常用
bcscale — 配置默認小數點位數,相當於就是Linux bc中的”scale=”
bcsqrt — 求高精度數字平方根
bcsub — 將兩個高精度數字相減