执行这两行:
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,上面的存在精度问题,下面的却不存在?
谢谢回答
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
建议你看看浮点数使用二进制是如何表示的。 这里的问题就是0.3和0.1不能使用二进制完全表示,所以会丢失精度,而0.4和0.2 是可以完全表示的
建议你看看浮点数使用二进制是如何表示的。 这里的问题就是0.3和0.1不能使用二进制完全表示,所以会丢失精度,而0.4和0.2 是可以完全表示的