我做了一个简单的代码,保持0.1加零。 这是代码:
static double num = 0;
public static void main(String[] args) {
num+=0.1;
System.out.println(num);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
main(null);
}
}
这是它输出的内容:
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
...
但我希望输出看起来像这样:
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
...
为什么会这样做或者如何解决它?
答案 0 :(得分:0)
尝试:
System.out.printf("%.1f" , num);
而不是:
System.out.println(num);
这将限制小数点右边的小数位。 如果你想要三个小数位,你可以使用%。3f
答案 1 :(得分:0)
除了已经建议使用String格式。需要注意的另一点是浮点数并不完全准确。
在Java中,您希望使用BigDecimal来准确表示这些类型的值。
答案 2 :(得分:-1)
这称为舍入错误。在涉及double
或float
类型时,这只是生活中的一个事实。如果您感到好奇,请在wiki上阅读相关内容。
如果您想要精确,可以使用BigDecimal
课程。但如果数字具有无限数字,例如1/3,它将崩溃。虽然这不会成为您提供的片段中的问题。