问题很简单:
float f1 = Float.parseFloat("41.975779")
//Value for f1 is 41.97578 -> An error of 1ppm
更糟糕!!
float f2 = Float.parseFloat("41.975645")
//Value for f2 is 41.975643 -> An error of 2ppm
如果我使用Float.parseFloat或Float.valueOf并不重要,它们都会给出相同的结果。
注意:在android中编程时会出现这个问题,我没有在pure-java中尝试过,但我认为结果会相同。
答案 0 :(得分:3)
你的字符串浮动转换正如所宣传的那样完全,虽然显然不完全符合你的预期: - )
IEEE754单精度浮点值(在float
中使用)仅具有大约七位小数的精度。
如果您想要更高的精确度,请使用double
,它提供大约十五个十进制数字,或切换到BigDecimal
以获得任意精度。
请注意,没有编码方案可以为您提供无限精度,总会有某些值无法表示(除非您切换到符号表示疗程)。