php 精度计算问题

PHP 投稿 18700 0 评论

php 精度计算问题

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

编程笔记 » php 精度计算问题

赞同 (77) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽