You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:59:32