부동소수점 오차의 해결과 BigDecimal
·
Language/Java
오늘도 Java 코드를 두들기던 중, 1000.10 + 0.20을 더했더니예상과 다른 1000.3000000000001이 나왔다. 일반적인 계산에서야 소수점 뒤 15자리 오차쯤은 무시해도 되지만, 금융 도메인은 다르다. 수백만 건의 거래가 매일 처리되고, 각 거래마다 이자, 수수료, 환율 계산이 붙는다. 거래 한 건당 0.0000000000001원의 오차가 생긴다고 쳤을 때, 1억 건이 쌓이면 단순 계산으로도 무시 못 할 금액이 된다. 실제로 1990년대에 미국의 한 은행이 이자 계산에부동소수점을 그대로 써서 고객들에게 잘못된 금액을 지급한 사례도 있다. 오늘은 왜 이런 일이 생기는지,그리고 어떻게 해결하는지를 정리해보려 한다. 먼저 두 가지 코드를 예시로 문제를 직접 확인해보자.상품의 가격 계산..