new BigDecimal("0.1")과 new BigDecimal("0.1")을 더한 결과값은 0.2로 출력될까?
-> 맞다.
public static void main(String[] args) {
BigDecimal sth = new BigDecimal("0.1");
BigDecimal sth2 = new BigDecimal("0.1");
System.out.println(sth.add(sth2));
// 결과값: 0.2
}
문자열로 생성하지 않은(double로 생성한) BigDecimal의 합계 결과값에는 오차가 있을 수 있다.
new BigDecimal(0.1)과 new BigDecimal(0.1)을 더한 결과값은 0.200000000000000011102... 이므로 유의한다.
new BigDecimal("0.2345")과 같이 문자열로 BigDecimal을 생성할 경우, 내부에서 수는(2.345) 다음과 같이 표현된다.

2.345를 2345로 자릿수를 올려서 저장한다.
자릿수를 올리지 않고 2.345를 이진법으로 저장하려고 한다면 오차가 분명히 존재한다.
2.345는 이진법으로 10.01011000010100011111...로 개수가 정해진 비트 내에서 오차 없이 표현할 수 없기 때문이다.
하지만 2.345를 2345로 자릿수를 올려서 int로 저장하고 있기 때문에, BigDecimal은 2.345을 오차없이 저장한다.