getFloat()返回值与原数据不符的原因咨询
为什么用getFloat()获取数据时16797533会变成16797532?
这本质是单精度浮点数(Float)的精度限制问题:
- Float是32位单精度浮点数,只有24位有效二进制位,对应十进制的话大概是6-7位有效数字。你的数值16797533是8位数字,已经超出了Float能精确表示的范围。
- 当你用
new Float(16797533)创建对象时,JVM就会把这个数舍入到Float能表示的最近值——也就是16797532,所以后续打印出来的结果自然是这个舍入后的值。 - 如果数据库里的字段类型也是Float,那数据在存入时就已经被舍入过了,用
getFloat()读取时自然拿不到原始值;而改用getString()的话,相当于直接读取数据库中存储的字符串形式(或精确数值类型的字符串表示),避开了浮点数的精度损失问题。
内容的提问来源于stack exchange,提问作者Jaya Joshi
相关产品推荐
相关产品推荐

