PHP加减乘除精度丢失 大数据四则运算计算解决方案

如果你在PHP里做钱相关的计算时候一定要注意了,无论是PHP还是其它语言,在数字计算方面总会有浮点数精度丢失的问题出现。原因就不贴了,自己百度之,这里只提供PHP的解决方案,其它语言的自行百度。

我们可以使用PHP内置的BCMath扩展来做四则运算,不但可以解决精度丢失问题,还可以支持超大数字的计算。

对于任意精度的数学,PHP提供了支持用字符串表示的任意大小和精度的数字的二进制计算,最多为2147483647-1(或0x7FFFFFFF-1)。

BCMath函数仅在 PHP 编译时配置了 --enable-bcmath 时可用。

PHP 的 Windows 版本已内建对此扩展的支持。不需要载入额外的扩展来使用这些函数。

用法如下:

<?php
// 设置默认小数点保留位数
bcscale(2);
// 加法
echo bcadd(1234567890.123, 987654321987654321), PHP_EOL;
// 减法
echo bcsub(1234567890.123, 987654321987654321), PHP_EOL;
// 乘法
echo bcmul(1234567890.123, 987654321987654321), PHP_EOL;
// 除法,指定保留小数后20位,否则小数点不够结果会是0
echo bcdiv(1234567890.123, 987654321987654321, 20), PHP_EOL;

输出结果:

987654323222222211.12

-987654320753086430.87

1219326312467160482730834171.48

0.00000000124999998748

  • 发表评论
当前用户:
  • 评论列表