问题是您的双字面值没有完全表示。
double a = 6.6;
double b = 1.1;
System.out.println(Double.toHexString(a));
System.out.println(Double.toHexString(b));
System.out.println("xx: " + new BigDecimal(a));
System.out.println("yy: " + new BigDecimal(b));
虽然我们声明a = 6.6
它是二进制重复小数。因此它被截断。
0x1.a666666666666p2
0x1.199999999999ap0
这显示了表示为十六进制,最后的“9”四舍五入至“A”,而最后6四舍五入留六人。
然后,我们用`BigDecimal的
xx: 6.5999999999999996447286321199499070644378662109375
yy: 1.100000000000000088817841970012523233890533447265625
我们可以看到分子被作为不到6.6近似分母得到近似刚刚超过1.1打印出的实际值。分工的结果。
System.out.println(new BigDecimal(a/b));
#5.99999999999999911182158029987476766109466552734375
然后铸造int
刚截断浮点的一部分,你的左边有5
可能是因为'2 * 3.3/1.1'导致像'5.999'和铸造为int的结果'5' – danielspaniol
3.3/1.1 => 2.9999999999999996 – mishadoff