java - 如何在 Java 中以 0.1f 为增量在 0.1f 和 1.0f 之间迭代?

标签 java

<分区>

Possible Duplicate:
Java floats and doubles, how to avoid that 0.0 + 0.1 + … + 0.1 == 0.9000001?

我在 Java 中遇到以下问题 - 我需要以 0.1f 为增量在 0.1f 和 1.0f 之间迭代,所以我希望我的输出看起来像这样:

    0.1
    0.2
    0.3
    0.4
    ...
    0.9

相反,当我这样做时:

for(float i = 0.1f; i < 1f; i += 0.1f)
    System.out.println(i);

我明白了

0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

我想这与计算机表示分数的方式有关,但我想知道这是为什么,如果有什么我可以做的来阻止它。 谢谢。

最佳答案

在 for 循环中使用整数以避免重复的 float 学运算,这会导致浮点错误。

for (int i = 1; i < 10; i++)
{
   float f = (float) i / 10.0f;
   System.err.println(f);
}

关于java - 如何在 Java 中以 0.1f 为增量在 0.1f 和 1.0f 之间迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13713465/

相关文章:

java - 为什么 Jersey 客户端在我的列表应该为空时将对象插入到列表中?

java - LinkedList.pollLast() 抛出 NullPointerException

java - eden 和其他代的 java 堆分配如何影响垃圾收集和性能?

java - JTable 不显示我的 xml 数据

java - 变化计算器减一

java - 在java中获取固定数量的TCP数据包

java - 如果按钮被读取为节点,如何在 JavaFX 中获取按钮的文本?循环遍历按钮组/VBox。将其作为节点返回

Java 三角形类

java - 接受列表作为使用多部分内容类型的 Jersey Web 服务的参数

java - Jboss AS 7 为地址/0.0.0.0 和端口 8009 的连接器创建的最大线程数 (64)