java.math.BigInteger
java.math.BigDecimal
- 위의 클래스들은 String 과 같이 값의 변경이 불가능한 immutable 클래스 입니다.
BigInteger, BigDecimal 클래스는 long 클래스로도 표현할 수 없이 큰 수를 표현하거나, double 연산에서 발생하는 사소한 오차도 허용하지 않기 위해 사용되는 클래스 입니다.
BigInteger big1 = new BigInteger("100000000000000000000");
BigInteger big2 = new BigInteger("-99999999999999999999");
BigInteger r1 = big1.add(big2);
System.out.println(r1);
출력결과
1
컴퓨터가 표현할 수 있는 수보다 큰 수를 다루기 때문에 스트링으로 인자를 전달합니다.
또한 immutable 클래스 이기 때문에 인스턴스의 값이 변하지 않고 연산 결과를 다른 인스턴스에 저장하게 됩니다.
BigInteger 인스턴스에 저장된 값을 intValueExact() 메소드를 통해 int형 정수로 반환할 수 있습니다.
int num = r1.intValueExact();
BigDecimal d1 = new BigDecimal("1.6");
BigDecimal에 값을 전달할 때 1.6에 ""를 붙여 전달함으로써 사소한 오차조차 줄일 수 있습니다.
컴퓨터가 1.6을 표현하려면 1.6과 아주 근사하지만 작은 오차를 가진 수로 표현하게 되는데, BigDecimal에 1.6을 그대로 전달하면 전달되는 과정에서 이 작은 오차가 포함된 상태로 BigDecimal에 저장되게 됩니다. 따라서 이러한 오차도 줄이기 위해 "1.6"으로 값을 전달하는 것 입니다.