龙空技术网

PHP浮点数计算bug

波多老师 213

前言:

此刻兄弟们对“php小数点2位小数”大体比较注意,朋友们都需要了解一些“php小数点2位小数”的相关资讯。那么小编也在网络上收集了一些有关“php小数点2位小数””的相关知识,希望看官们能喜欢,你们快快来学习一下吧!

在做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官方文档手册

标签: #php小数点2位小数