我的理解是,在Java中安全地表示一个双精度数的最大位数是2 ^ 53-1或9007199254740991。而且这与小数无关,因为它由指数位表示。请考虑以下内容:
double dblprice = 9007.199254740991;
System.out.println(dblprice);
dblprice = 9007199.254740991;
System.out.println(dblprice);
输出为
9007.199254740992
9007199.25474099
我不明白为什么在第一种情况下,最后一个1被2取代,而在第二种情况下,为何最后一个数字被丢弃。非常感谢!