企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## PHP大数计算 通常在遇到浮点数计算的时候,会出现计算结果错误的问题,这是由于系统处理浮点数的方式决定的。那么这种时候,为了计算的严谨,需要采用特殊的计算方法去处理这些计算逻辑。 > 对于浮点数的说明,PHP官网有专门的章节来说明 [点我查阅](http://php.net/manual/zh/language.types.float.php) 我们先来看一组计算数据: ``` <?php $a = 1.2345; $b = 1.2344; echo $a - $b; // 理论上应该输出 0.0001 // 实际上输出的是 9.9999999999989E-5 ``` 无论该数值是否是科学计数法,在我们后续的计算中都是不可用的。 其实PHP已经为我们提供了一组专门用于计算的函数,成为bc函数,常用的方法有: * **加:bcadd($p1, $p2, $scale)** * **减:bcsub($p1, $p2, $scale)** * **乘:bcmul($p1, $p2, $scale)** * **除:bcdiv($p1, $p2, $scale)** * ...... 使用方法也很简单: ``` <?php $a = 1.2345; $b = 1.2344; echo bcadd($a, $b, 4); // output: 2.4689 echo bcsub($a, $b, 4); // output: 0.0001 echo bcmul($a, $b, 4); // output: 1.5238 echo bcdiv($a, $b, 4); // output: 1.0000 ``` > 有个需要注意地方,函数的第三位是设置计算需要保留的小数位,但是切记bc函数保留的方式是直接抹掉不需要的位数,类似 **floor** 的用法,所以这里在保留小数位的时候,需要特别处理。 例如下面的代码: ``` <?php $a = 0.866; $b = 1; echo bcmul($a, $b, 2); // output: 0.86 echo round(bcmul($a, $b, 3), 2); // output: 0.87 ```