这个是有效数字的问题,他的有效数字不是根据10进制的位数,而是二进制的位数算的,double的有效数字是53位二进制,超出的部分都会被当成0
System.out.println(Long.toBinaryString(50003598627370496L));
System.out.println(Long.toBinaryString(45035996273704964L));
System.out.println(Long.toBinaryString(50003598627370496L).substring(0, 53));
System.out.println(Long.toBinaryString(45035996273704964L).substring(0, 53));
System.out.println(Long.parseLong("10110001101001100000001000001101101011001111011000000000", 2));
System.out.println(Long.parseLong("10100000000000000000000000000000000000000000000000000000", 2));
转成二进制后取53位再补上0直到和原来的位数相同
10110001101001100000001000001101101011001111011000000000
10100000000000000000000000000000000000000000000000000100
10110001101001100000001000001101101011001111011000000
10100000000000000000000000000000000000000000000000000
50003598627370496
45035996273704960