java中小数运算常常会出现这种丢失精度的问题
如1.2+1.4结果应该是2.6但打印结果却并非2.6
1.首先java中小数的存储方式:
java中浮点数存储方式分三部分即 符号位、指数位、尾数位。
例如folat占四个字节:那么总共就是32位、符号位占1位、指数占8位、尾数位就是23位;
2.而计算中所有数据在进行运算存储都需要转换成二进制的形式进行;
再来看看小数的十进制转二进制步骤:
(1):小数部分乘2得到积数;
(2):如果积大于0则取二进制中的1如果积小于0则取二进制中的0;
(3):如果积大于1就把积的整数部分取除,继续乘2得到一个积 重复步骤2 以此循环直到结果位整数。
例如图中得 浮点数1.2转换位2进制:
整数部分:0001;
小数部分:0.2 x 2 = 0.4 0.4x2= 0.8 0.8x2 = 1.6 0.6x2 = 1.2 0.2x2 = 0.4 0.4x2=0.8...................
0 0 1 1 0 0 .................
结果就是0001.0011001100................
因此小数部分无限循环导致计算机无法精确显示。