字符串到Float在java中不起作用?

时间:2015-05-26 14:31:45

标签: java floating-point

问题很简单:

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中尝试过,但我认为结果会相同。

1 个答案:

答案 0 :(得分:3)

你的字符串浮动转换正如所宣传的那样完全,虽然显然不完全符合你的预期: - )

IEEE754单精度浮点值(在float中使用)仅具有大约七位小数的精度。

如果您想要更高的精确度,请使用double,它提供大约十五个十进制数字,或切换到BigDecimal以获得任意精度。

请注意,没有编码方案可以为您提供无限精度,总会有某些值无法表示(除非您切换到符号表示疗程)。