Discuss / Java / 想请问 double x = 1.0 / 10; double y = 1 - 9.0 / 10; 为啥x和y中x是对的0.1,而y就是不精确的呢?

想请问 double x = 1.0 / 10; double y = 1 - 9.0 / 10; 为啥x和y中x是对的0.1,而y就是不精确的呢?

Topic source

其实一直不太懂,浮点数不精确到底是随机的不精确还是计算出来的啊,就是double y = 1 - 9.0 / 10,中y=0.099999999,为啥不是0.0999979这样

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]
  1. 浮点数能不能在计算机内存精确表示,必须换算成二进制,如果是无限循环小数,就不能精确存储
  2. 你看到的0.1, 0.099999都是打印出来的字符串,把二进制浮点数转换成十进制字符串,这个过程又是不精确的

碰巧两次不精确的转换可以显示成0.1

懂了!谢谢廖神!


  • 1

Reply