double d1 =42346134311111111111D;
double d2 =d1+1;
if(d1==d2){
System.out.println("true");
}else{
System.out.println("false");
}
输出:true;
因为:
1 浮点数存储时,按照符号,指数,位数进行存储。
2 先将10进制数,转换成对应的二进制小数。
3 然后将小数点移至尾数前为1的最左边,如上面例子:此时数太大时,小数点左移动大,科学计数法指数变大,尾数变多。
4 当尾数太大,超过float或者double尾数表示范围时,将要做截断操作。
5 一个超出表示范围的大数,再加一后。此时加一很有可能被截断。
具体浮点数在JAVA中如何存储参见:
https://blog.csdn.net/aduovip/article/details/47728921