我正在用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