Double.intValue() 如何工作?

2022-09-01 11:43:24

此代码

Double dbl = 254.9999999999999;
Integer integ = dbl.intValue();
System.out.println(integ);

显示 254,但一个 “9” 更多

Double dbl = 254.99999999999999;
Integer integ = dbl.intValue();
System.out.println(integ);

它已经是255..为什么?


答案 1

要知道双精度值的确切值,可以使用 BigDecimal:

System.out.println(new BigDecimal(254.9999999999999));
System.out.println(new BigDecimal(254.99999999999999));

指纹:

254.9999999999998863131622783839702606201171875
255

所以这仅仅是由于(限制)双精度...


答案 2
System.out.println(254.9999999999999 == 255.0);
System.out.println(254.99999999999999 == 255.0);

指纹

false
true

这应该给你一个提示。该类型最多可以表示 16 个有效数字,而文本有 17 个有效数字。因此,最接近第二个十进制文本的值为 。doubledouble255.0

对于第二行代码,Eclipse 实际上会发出警告:

比较相同的表达式

因为编译器已经意识到这些只是完全相同值的两个文本。double