정확한 돈 계산? BigDecimal이 답!

by DD
2년 전
조회수 7

자바에서 기본 실수형 사용 시 부동소수점 방식으로 인해 정확한 계산이 어려움

BigDecimal을 사용하여 정밀한 십진수 계산을 가능하게 함

정산 시스템과 같이 정확한 금액 계산이 필요한 곳에서 BigDecimal 사용 권장

부동소수점의 원리: 2진수 표현의 한계

자바의 기본 실수형은 2진수 기반으로 숫자를 표현하며, 0.1과 같은 10진수를 정확히 표현할 수 없다. 따라서 근사값을 사용하게 되어 오차가 발생한다. 구체적으로 부호, 지수, 가수를 사용하여 실수를 표현하며, 이 과정에서 정밀도 손실이 발생한다.

BigDecimal vs. double: 정확성 vs. 성능

BigDecimal은 내부적으로 10진수를 사용하여 정확한 계산을 보장한다. 반면, double은 속도가 빠르지만 정밀도 문제가 있다. 따라서 정산 시스템과 같이 정확한 계산이 필요한 경우 BigDecimal을 사용하고, 성능이 중요한 경우에는 double 사용을 고려해야 한다.

BigDecimal 활용 팁: equals()와 compareTo()

BigDecimal 사용 시 equals()는 소수점 자릿수까지 비교하므로 주의해야 한다. 따라서 compareTo()를 사용하여 소수점 자릿수를 무시하고 값을 비교하는 것이 좋다. 구체적으로 add(), subtract(), multiply(), divide() 등의 메서드를 활용하여 정확한 계산을 수행해야 한다.

부동소수점 이야기