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 — 将两个高精度数字相减