Monday, 18 January 2010

Proper way to compare java.math.BigDecimal

  1. import java.math.BigDecimal;  
  2. import java.math.MathContext;  
  3.   
  4. public class BigDecimalTest {  
  5.   
  6.  public static void main(String[] args) {  
  7.     
  8.   System.out.println(new BigDecimal(0).equals(BigDecimal.ZERO));  
  9.   System.out.println(new BigDecimal("0").equals(BigDecimal.ZERO));  
  10.   System.out.println(new BigDecimal(0.0d).equals(BigDecimal.ZERO));  
  11.   System.out.println(new BigDecimal(0.0f).equals(BigDecimal.ZERO));  
  12.     
  13.   //WTF  
  14.   System.out.println(new BigDecimal("0.0").equals(BigDecimal.ZERO)); // false!!!  
  15.   System.out.println(new BigDecimal("0.0").equals(new BigDecimal("0"))); // false!!!  
  16.   System.out.println(new BigDecimal("0.0").equals(new BigDecimal(0.0))); // false!!!  
  17.     
  18.   //same is with "1" and "1.0", and so on  
  19.   
  20.   //That's not a precision problem  
  21.   MathContext mc = new MathContext(2);  
  22.   System.out.println(new BigDecimal("0.0", mc).equals(new BigDecimal(0.0, mc))); // false!!!  
  23.     
  24.   //So, the proper way to compare two big decimals is:  
  25.   System.out.println(new BigDecimal("0.0").compareTo(BigDecimal.ZERO) == 0);   
  26.  }  
The answer lies in API docs: BigDecimal#equals.

No comments:

Post a Comment