BigDecimal multiply by zero

You can’t use the equals() method to compare BigDecimals, like this assertion does. That is because this equals function will compare the scale. If the scale is different, equals() will return false, even if they are the same number mathematically.

You can however use compareTo() to do what you want:

As @assylias points out, you should also use the new BigDecimal("22.3") constructor to avoid double precision issues.

BigDecimal expected = BigDecimal.ZERO;
BigDecimal actual = new BigDecimal("22.3").multiply(BigDecimal.ZERO);
assertEquals(0, expected.compareTo(actual));

There is also a method called signum(), that returns -1, 0 or 1 for negative, zero, and positive. So you can also test for zero with

assertEquals(0, actual.signum());

Leave a Comment

tech