如果用PHP的算术计算浮点数的时候,可能会遇到一些计算结果错误的问题
- <?php
- $a = 0.1;
- $b = 0.7;
- var_dump(($a + $b) == 0.8); //false
- $f = 0.58;
- var_dump(intval($f * 100)); //为啥输出57
解决方案:安装bcmath这个扩展
bc是Binary Calculator的缩写。bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scale]),如果scale没有提供,就用bcscale的缺省值。这里大数直接用一个由0-9组成的string表示,计算结果返回的也是一个string。bcadd — 将两个高精度数字相加
bccomp — 比较两个高精度数字,返回-1, 0, 1
bcdiv — 将两个高精度数字相除
bcmod — 求高精度数字余数
bcmul — 将两个高精度数字相乘
bcpow — 求高精度数字乘方
bcpowmod — 求高精度数字乘方求模,数论里非常常用
bcscale — 配置默认小数点位数
bcsqrt — 求高精度数字平方根
bcsub — 将两个高精度数字相减