我注意到 Java 浮点精度存在一些问题
Float.parseFloat("0.0065") - 0.001 // 0.0055000000134110451
new Float("0.027") - 0.001 // 0.02600000000700354575
Float.valueOf("0.074") - 0.001 // 0.07399999999999999999
我不仅对 Float
有问题,而且对 Double
也有问题。
谁能解释一下幕后发生的事情,我们如何才能得到准确的数字?处理这些问题时,正确的处理方式是什么?
最佳答案
问题很简单,float
的精度有限;它不能准确表示 0.0065
。 (double
也是如此,当然:它具有更高的精度,但仍然是有限的。)
使上述问题更加明显的另一个问题是 0.001
是 double
而不是 float
,因此您的 float
被提升为 double
以执行减法,当然此时系统无法恢复 double
丢失的精度> 可以代表开始。为了解决这个问题,你会写:
float f = Float.parseFloat("0.0065") - 0.001f;
使用 0.001f
而不是 0.001
。
关于java - 在 Java 中 parseFloat 的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12752038/