php 精度计算问题

https://blog.csdn.net/qq_36025814/article/details/88559459

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

posted @ 2021-06-01 10:34  蓝天白鱼  阅读(318)  评论(0)    收藏  举报