执行这两行:
System.out.println(0.3-0.1);
System.out.println(0.4-0.2);
打印出来的分别是:
0.19999999999999998
0.2
问题1:为什么第一个现实出来的,小数点后面有17位,double的长度不是64么,不应该只能显示16位么?
问题2:浮点数的精度问题原因我懂,但是为什么同样结果是0.2,上面的存在精度问题,下面的却不存在?
谢谢回答?
执行这两行:
System.out.println(0.3-0.1);
System.out.println(0.4-0.2);
打印出来的分别是:
0.19999999999999998
0.2
问题1:为什么第一个现实出来的,小数点后面有17位,double的长度不是64么,不应该只能显示16位么?
问题2:浮点数的精度问题原因我懂,但是为什么同样结果是0.2,上面的存在精度问题,下面的却不存在?
谢谢回答?
public class Test {
public static void main(String args[]) {
System.out.println(0.3f-0.1f);
System.out.println(0.3-0.1);
}
}
15 回答8.1k 阅读
8 回答5.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
建议你看看浮点数使用二进制是如何表示的。 这里的问题就是
0.3
和0.1
不能使用二进制完全表示,所以会丢失精度,而0.4
和0.2
是可以完全表示的