我正在用BigDecimal執行一個簡單的乘法,當乘以零(在這個用例中乘以零是正確的)時,我發現了一些奇怪的行爲。BigDecimal乘以零
基本的數學告訴我,任何事情乘以零將等於零(參見:Zero Product Property和Multiplication Properties)
但是,下面的代碼將始終失敗,相同的錯誤:
assertEquals(new BigDecimal(0), new BigDecimal(22.3).multiply(new BigDecimal(0)));
java.lang.AssertionError: Expected :0 Actual :0E-48
這是BigDecimal的一個不準確的地方,還是我在某處丟失了一些數學分支?
注:JDK 1.6.0_27中的IntelliJ 11
是考慮數值分析,特別是逼近和截斷誤差 – 2012-08-14 09:26:31
或者在'double'你可以寫'assertEquals(0,23.3 * 0,0);';) – 2012-08-14 09:29:01
並且查看'BigDecimal.ZERO'。 – EJP 2012-08-14 10:41:14