## 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
```