php処理高精度計算関数

908 ワード

方法1:
PHPは任意の精度数学計算にバイナリ計算器(Binary Calculator)を提供し,任意の大きさと精度の数字を文字列形式で記述することをサポートする.
bcadd-加算bccomp-比較bcdiv-bcmod-除去bcmod-余剰bcmul-乗算bcpow-次bcpowmod-次のbcpowmod-次のbcscale-すべての関数に小数位精度bcsqrtを設定-平方根bcsub-減算
方法2:
最近1つの奇怪な問題に出会って、ショッピングモールは微信を通じて支払う注文はいつも1銭少なくて、調査を経てPHP浮動小数点演算の精度の問題がもたらしたのです
PHP浮動小数点数演算精度によるもので、鳥兄のBolgには詳細な説明がある.http://www.laruence.com/2013/03/26/2884.html、小数はバイナリ表示の場合、0.58はバイナリに対して無限長の値です
1
2 0.58 (52 ) : 0010100011110101110000101000111101011100001010001111 0.57 (52 ) : 0010001111010111000010100011110101110000101000111101
浮動小数点数に変換(64ビットデュアル精度)
1
2 0.58 -> 0.57999999999999996 0.57 -> 0.56999999999999995
0.58*100 = 57.999999999 
(int)(0.58*100) = 57 

解決策:
1 (int)((0.58*1000)/10) = 58