AI Briefing

부동소수점 이야기

·2023.10.20 23:00

정밀한 금액 계산이 필요한 정산 시스템에서는 부동소수점 오차를 방지하기 위해 BigDecimal을 사용해야 한다.

Java의 double과 같은 기본 실수형 자료형은 10진수를 2진수로 변환하는 과정에서 무한 소수를 완벽히 표현하지 못해 부동소수점(Floating point) 오차가 발생한다. 예를 들어 0.1 + 0.2의 결과가 0.3이 아닌 0.30000000000000004로 계산되는 식이다.

이러한 오차는 정밀한 계산이 필수적인 정산 시스템에서 1원 이상의 금액 차이를 발생시킬 수 있어 매우 위험하다. 따라서 이를 해결하기 위해 BigDecimal을 사용한다.

BigDecimal의 주요 특징은 다음과 같다.

  • 내부적으로 10진수로 숫자를 저장하여 0.1과 같은 값을 정확히 표현함
  • 필요한 만큼 자릿수를 늘려 무한 소수 정밀도를 가짐
  • 문자열로 초기화하여 부동소수점 한계를 우회함
  • 단, 기본 자료형보다 연산 속도가 느리며, 비교 연산 시 equals() 대신 compareTo()를 사용하는 등 주의가 필요함

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.