PHP浮点型计算失去精度
将 (0.7+0.1)*10的结果转换为整形的时候,intval((0.7+0.1)*10)期望结果是int (8),
而实际结果是7,这是因为php的浮点型计算遵寻IEEE 754双精度。
PHP提供了以下浮点型计算库
bcadd — 将两个高精度数字相加
bccomp — 比较两个高精度数字,返回-1, 0, 1
bcdiv — 将两个高精度数字相除
bcmod — 求高精度数字余数
bcmul — 将两个高精度数字相乘
bcpow — 求高精度数字乘方
bcpowmod — 求高精度数字乘方求模,数论里非常常用
bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=”
bcsqrt — 求高精度数字平方根
bcsub — 将两个高精度数字相减
将以上转换为
inval(bcadd(0.7,0.1)*10) 计算结果为 8
总结:
php不能将两个浮点型的小数进行相加,需要使用精度计算库中的函数进行计算,也不能比较两个浮点型数的大小。