php 在使用加减乘除等运算符计算的时候会把未定义类型的操作数转成浮点数然后进行算术运算
有句话说的好,永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数
浮点数运算示例
$a = '49'; $v = '48.98'; echo $a - $v;
正常来讲这里应该返回 0.2 吧,可实际运行结果是 0.020000000000003
php提供了高精度计算的函数库,实际上就是为了解决这个浮点数计算问题而生的
加法 bcadd
(PHP 4, PHP 5, PHP 7)
bcadd — 2个任意精度数字的加法计算
<?php $a = '1.234'; $b = '5'; echo bcadd($a, $b); // 6 echo bcadd($a, $b, 4); // 6.2340 ?>
减法 bcsub
(PHP 4, PHP 5, PHP 7)
bcsub — 2个任意精度数字的减法
<?php $a = '1.234'; $b = '5'; echo bcsub($a, $b); // -3 echo bcsub($a, $b, 4); // -3.7660 ?>
乘法 bcmul
(PHP 4, PHP 5, PHP 7)
bcmul — 2个任意精度数字乘法计算
<?php echo bcmul('1.34747474747', '35', 3); // 47.161 echo bcmul('2', '4'); // 8 ?>
除法 bcdiv
(PHP 4, PHP 5, PHP 7)
bcdiv — 2个任意精度的数字除法计算
<?php echo bcdiv('105', '6.55957', 3); // 16.007 ?>