最近研究Java中double类型的存储,比如说0.1,它存储的时候转为二进制,分为指数跟尾数。因为转换的机制,0.1并不能精确的存储,而是指数部分一个很长的无线循环过程。
1. 那么,Java语言中,定义一个变量 double a = 0.1, 它存储的时候,是截取了64位,存在内存中吗?
当我们调试的时候,我们选中一个double类型的变量,会看到这个变量的值是0.1,那么这个0.1是一个~0.1的近似值吗?
2. 还有,有人说2.0-1.1 的真实结果不是输出0.9,而是0.89999999999999999, 但是我们调试的时候,看到的变量值就是0.9,是JVM给自动取近似值了么?
3. double d = 2.4; System.out.println(d); 输出的是2.4,而不是2.3999999999999999。我理解的是,d在二进制存储的时候,是存成了对应2.3999999999999999的二进制序列,那么反过来,这个序列在转成十进制的时候,应该是2.3999999999999999呀,怎么输出了2.4呢?