PHP中bcdiv函数计算时输出丢失小数部分的问题咨询
PHP中bcdiv函数计算时输出丢失小数部分的问题咨询
各位好,我最近在使用PHP的bc系列函数做高精度浮点计算时碰到了一个奇怪的问题,想过来问问大家有没有遇到过或者知道怎么解决。
先给大家看一下我写的代码:
<?php $a = "38.5"; $result = bcdiv(bcadd($a, "6"), "2", 100); echo $result; ?>
现在运行这段代码后,实际输出的结果是:
22.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
但我预期的输出应该是:
22.2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
我一开始以为是bcdiv的精度设置有问题,但已经给它传了100位的精度了,后来仔细捋了一遍才发现问题出在bcadd函数的默认精度上!
PHP里的bc系列函数如果不手动指定小数点保留位数的话,会使用默认的精度值,而这个默认值默认是0。也就是说,我代码里的bcadd($a, "6")因为没传第三个参数,会自动把计算结果44.5取整成了44,之后再用bcdiv除以2,自然就得到了22.000...的结果。
解决办法其实很简单,就是给bcadd也指定足够的精度,比如和bcdiv一样设置成100位,修改后的代码如下:
<?php $a = "38.5"; $result = bcdiv(bcadd($a, "6", 100), "2", 100); echo $result; ?>
这样修改后,bcadd会正确保留44.5这个结果,再除以2就能得到我们预期的22.250000...的输出了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

