例如:
$sell_price = 123.456;
$buy_price = 123.455;
$t_diff = $sell_price - $buy_price;
預期結果是: 0.001,結果出來的是:0.00000000000098!
這是因為浮點運算的緣故。原因就不說了。直接看如何處理?!
1. 先個別 x 1000,相減,然後再除1000
2. php提供了高精度計算的函式庫,實際上就是為了解決這個浮點數計算問題而生的。
主要函式有:
- bcadd — 將兩個高精度數字相加
- bccomp — 比較兩個高精度數字,返回-1, 0, 1
- bcdiv — 將兩個高精度數字相除
- bcmod — 求高精度數字餘數
- bcmul — 將兩個高精度數字相乘
- bcpow — 求高精度數字乘方
- bcpowmod — 求高精度數字乘方求模,數論裡非常常用
- bcscale — 配置預設小數點位數,相當於就是Linux bc中的”scale=”
- bcsqrt — 求高精度數字平方根
- bcsub — 將兩個高精度數字相減
** 切記:永遠不要相信浮點運算會精準到小數點最後一位,也不要拿浮點運算的數字來做比較是否相等?!
沒有留言:
張貼留言