PHP浮点数运算精度问题(php 浮点数 误差)

网友投稿 440 2022-06-17


最近有客户反应商城订单金额总是不准确,总是相隔一分钱。检查相关代码逻辑都是正确的,就是运用了四则运算。大概推测问题可能出在浮点计算丢失精度。在《PHP程序员雷雪松的博客》中写过一篇关于JS精度不准确的文章-《JS中浮点数运算不精准》。下面PHP程序员雷雪松详细的介绍一下如何解决PHP浮点数运算精度问题。

PHP有一个BC Math高精确度的数学扩展,它可以为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述。在需要处理数字计算时,不要在简单地使用四则运算,而要用BC Math相关的函数来处理。

1、安装BC Math扩展

本类函数仅在 PHP 编译时配置了 –enable-bcmath 时可用。PHP 的 Windows 版本已内建对此扩展的支持,不需要载入额外的扩展来使用这些函数。如果需要编译安装,请参考PHP安装编译配置里的扩展 。

2、BC Math提供的函数

bcadd — 2个任意精度数字的加法计算

bccomp — 比较两个任意精度的数字

bcdiv — 2个任意精度的数字除法计算

bcmod — 对一个任意精度数字取模

bcmul — 2个任意精度数字乘法计算

bcpow — 任意精度数字的乘方

bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulus

bcscale — 设置所有bc数学函数的默认小数点保留位数

bcsqrt — 任意精度数字的二次方根

bcsub — 2个任意精度数字的减法

3、BC Math函数用法

bcscale(3); /设置小数点之后的位数,不设置,默认正整数 echo bcadd('1.234', '5'); // 6.234 echo bcsub('1.234', '5'); // -3.766 echo bcmul('2', '4'); // 8 echo bcdiv('105', '6.55957', 3); // 16.007,设置3位小数点 echo bcmod('4', '2'); // 0


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Docker真的很好用,PHP开发者都应该学起来(docker php开发环境)
下一篇:MySQL在并发场景下的问题及解决思路(mysql并发事务带来的问题是)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~