String to Float 在 java 中不起作用?
String to Float is not working in java?
问题很简单:
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 中尝试过,但我认为结果是一样的。
您的字符串到浮点数的转换与宣传的一样完全,尽管显然与您预期的不完全一样:-)
IEEE754 单精度浮点值(在 float
中使用)只有大约七位十进制数字的精度。
如果您想要更高的精度,请使用 double
,它提供大约 15 位十进制数字,或者切换到 BigDecimal
以获得任意精度。
请注意,没有任何编码方案可以为您提供 无限 精度,总会有 一些 值无法表示(当然除非你切换到符号表示)。
问题很简单:
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 中尝试过,但我认为结果是一样的。
您的字符串到浮点数的转换与宣传的一样完全,尽管显然与您预期的不完全一样:-)
IEEE754 单精度浮点值(在 float
中使用)只有大约七位十进制数字的精度。
如果您想要更高的精度,请使用 double
,它提供大约 15 位十进制数字,或者切换到 BigDecimal
以获得任意精度。
请注意,没有任何编码方案可以为您提供 无限 精度,总会有 一些 值无法表示(当然除非你切换到符号表示)。