java - 在 Java 中 parseFloat 的正确方法是什么

标签 java floating-point precision

我注意到 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.001double 而不是 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/

相关文章:

python - 级数计算精度

java - 如何显示 Jetty HTTPS 客户端可用的协议(protocol)和密码套件?

java - Java 的动态表/矩阵数据结构

binary - 如何从十进制数转换为IEEE 754单精度浮点格式?

ruby-on-rails - float 导致计算不准确

c - 将浮点值舍入为例如单精度

java - JScrollPane 没有将值更改为 ListEvents

java - 如何测试以下Java方法

floating-point - 不能用单精度浮点表示的最小整数

math - 任何语言中是否存在跨越参数范围 0-1 的数据类型?