問題是您的雙字面值沒有完全表示。
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