- 정산 시스템과 같은 정확한 숫자 계산을 다뤄야하는 시스템에서는 Java의 숫자를 다루는 가장 기본적인 타입인 Long이나 Double을 사용하는게 아니라 BigDecimal을 사용하라고 권고한다.
- 우리도 소수점 수량 연산이 필요하기 때문에 정확한 연산이 필요함.
- float이나 double의 부동 소수점 방식을 사용하면 표현할 수 있는 값의 범위가 넓어지지만 근사치를 사용하기 때문에 오차가 발생할 수 밖에 없다.
- ex) 0.01 * 0.1 ⇒ 0.001000000000000001
- BigDecimal은 실수 타입인 float이나 double를 사용하지 않고 정수를 사용하여 소수값을 다룬다.
부동 소수점의 시스템을 사용하지 않고 내부적으로 정수로써 소수를 저장하고 계산하기 때문에 정확한 계산이 가능한 것이다.
BigDecimal
- 주의 BigDecimal 생성자를 사용하는건 값이 부정확할 수 있기 때문에 valueOf를 사용하여 BigDecimal 인스턴스를 생성하는 것을 권고한다.
- (생성자와 valueOf를 사용하는 코드는 내부적으로 로직이 다르다)