在做php浮点数计算是遇到一个特殊的数字问题,如下式
(int)(0.29 * 100) = ?
上式期望值是29,但是通过php计算得到的结果却是28。
这是因为php的浮点数计算是不精确的,0.29 * 100 =28.9999999...再进行强制类型转换成int型时就得到了28。
那么如何解决这个问题呢?
PHP提供了bc系列数学函数,可以进行任意精度的计算。以上式为例:
注:bc数学函数的操作数参数为字符串类型
(int)bcmul("0.29", "100") = 29
bcadd 两个任意精度的数相加
bcsub 两个任意精度的数相减
bccomp 两个任意精度的数比较
echo bccomp('1', '2'); // -1echo bccomp('1.00001', '1', 3); // 0 第三个参数为比较的小数位数echo bccomp('1.00001', '1', 5); // 1
详细函数列表以及用法请参见php官方文档手册
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.5amiao.com/baike/1103.html