php intval 两位小数乘以100后结果少1

因为工作需要,价格处理的时候往往是两位小数需要换算成分,如:16.33元换算为1633分,直接乘以100也就行了的,但是又使用了一个转换为整数类型的函数intval() 这下子结果就不对了,如图:
这里写图片描述
结果:
这里写图片描述
可以看出原本结果应该是1633的,但是使用了函数intval() 之后结果居然变为了1632了,这是由于浮点类型的数字不能在不丢失一点儿精度的情况下通过内部二进制转换得到结果的,换句话说就是浮点类型的计算都会丢失精度的。
该函数的解决方法手册上也给出了,就是需要先使用strval() 函数将变量转成字符串类型,使用情况及结果如下:
这里写图片描述
这里写图片描述

还有就是直接使用类型转换也是不行的,如:(int)($pay_price*100) 结果也会损失精度的。
如图:
这里写图片描述
这里写图片描述

http://blog.csdn.net/leedaning/article/details/52485699

发表回复