PHP 浮点数计算精度问题

当打印 8.8 * 100 * 5 的计算结果,var_dump(8.8 * 100 * 5),打印出的结果是:
4400.000000000001。
为了避免后端比较数值的时候,出现意外情况,最好使用 round 函数保留 2 位小数点,或者直接用 bc 函数进行计算。

结论就是用 round 函数保留小数位数再进行比较

php
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 6
  • 我测试的时候没有得到这样的结果呢 ? 8.8 x 5 x 100 = 4400.000000000001

code

   // 乘法
    $nums1 = 8.8 * 5 * 100;
    var_dump($nums1);           // float(4400)
    var_dump(round($nums1, 2)); // float(4400)
    $result = bcmul(8.8,5,2);
    $result = bcmul($result,100,2);
    var_dump($result);          // string(7) "4400.00"

    // 除法
    $nums2 = 10/3;
    var_dump($nums2);            // float(3.3333333333333)
    var_dump(round($nums2, 2));  // float(3.33)
    var_dump(bcdiv(10,3,2));     // string(4) "3.33"


    // 关于保留2为小数且补足末尾0
    $nums3 = 2/10;                      // float(0.2)
    var_dump($nums3);
    var_dump(round($nums3, 2));         // float(0.2)
    var_dump(sprintf("%.2f", $nums3));  // string(4) "0.20"
    var_dump(bcdiv(2,10,2));            // string(4) "0.20"
1年前 评论
imzhi (楼主) 1年前
Tacks (作者) 1年前
imzhi (楼主) 1年前

保险起见还是bc吧

1年前 评论

www.laruence.com/2013/03/26/2884.h...

鸟哥的博文中也有类似的文章,可以供楼主参考

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!