php精度计算的问题。
1、如下: var_export()打印时损失了精度。
$a = 0.7; $b = 0.1; $jia = $a + $b; $jian = $a - $b; $cheng = $a * $b; $chu = $a / $b; var_export($jia); //0.79999999999999993 var_dump($jia); //float(0.8) echo $jia; //0.8 var_export($jian); //0.59999999999999998 var_dump($jian); //float(0.6) echo $jian; //0.6 var_export($cheng); //0.069999999999999993 var_dump($cheng); // float(0.07) echo $cheng; //0.07 var_export($chu); //6.9999999999999991 var_dump($chu); //float(7) echo $chu; //7
2、使用PHP bc类函数
$jia = bcadd($a, $b, 1); //$a+$b,保留1位小数 $jian = bcsub($a, $b, 2); //$a-$b,保留2位小数 $cheng = bcmul($a, $b, 3); //$a*$b,保留3位小数 $chu = bcdiv($a, $b, 3); //$a/$b,保留3位小数 var_export($jia); //'0.8' var_export($jian); //'0.60' var_export($cheng); //'0.07' var_export($chu); //'7.000'
3、更多
bcadd — 将两个高精度数字相加
bccomp — 比较两个高精度数字,返回-1, 0, 1
bcdiv — 将两个高精度数字相除
bcmod — 求高精度数字余数
bcmul — 将两个高精度数字相乘
bcpow — 求高精度数字乘方
bcpowmod — 求高精度数字乘方求模,数论里非常常用
bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=”
bcsqrt — 求高精度数字平方根
bcsub — 将两个高精度数字相减