search

Home  >  Q&A  >  body text

请教一个关于Java浮点数精度的基础问题

执行这两行:

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,上面的存在精度问题,下面的却不存在?

谢谢回答

高洛峰高洛峰2958 days ago464

reply all(1)I'll reply

  • 三叔

    三叔2016-11-08 13:25:34

    建议你看看浮点数使用二进制是如何表示的。 这里的问题就是0.3和0.1不能使用二进制完全表示,所以会丢失精度,而0.4和0.2 是可以完全表示的

    reply
    0
  • Cancelreply