计算机中浮点型的存储

问题

源自V2EX上的一个问题,有人问为什么数据库存了一个float型的变量,取出来之后跟原来的值不相等了。
比如数据库存入了$value = 5.59
但是读取后:
floatval($value) < floatval(5.59)

分析

这个涉及到浮点数在计算机中的存储方式,可以参考IEEE754
简单的来说,浮点数在存储的时候采用的是科学计数法,包含一个符号位,一定位数的小数部分和一定位数的指数部分,因此存储值会有一定的误差

结论

在涉及金额的存储时,不要使用浮点型!
可以使用字符串,或者将金额*100,然后按整形存储

欢迎打赏!