如果你在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