pile·
백엔드·삼쩜삼삼쩜삼·

택스테크 스타트업에서 부동소수점을 다루는 방법

세금 계산 도메인에서 발생하는 부동소수점 정밀도 오류의 원인과 Java BigDecimal을 통한 해결 방법을 다룬다. 이진수 변환 시 발생하는 무한 소수 표현 한계부터 BigDecimal 인스턴스화 주의사항까지 실용적 가이드를 제공한다.

핵심 포인트
  • 0.1을 10번 더해도 1.0이 되지 않는 이진 부동소수점의 근본적 정밀도 한계
  • 세금 계산에서 미세한 오차가 대규모 거래에서 큰 금액 차이로 이어질 수 있어 BigDecimal 사용이 필수
  • BigDecimal 인스턴스화 주의: new BigDecimal(0.1)은 double의 부정확함을 그대로 전파, BigDecimal.valueOf(0.1) 또는 new BigDecimal("0.1") 사용 권장
  • BigDecimal.valueOf(long) 내부에서 0-10 값을 미리 캐싱해 동일 객체 참조 반환, 메모리 효율 향상
  • 나눗셈·곱셈 연산 시 MathContext.DECIMAL64 적용으로 정밀도와 라운딩 정책 명시 필수
상세 정리
  • 컴퓨터는 10진수를 2진수로 변환할 때 많은 소수가 무한 반복 소수가 되어 정확한 표현 불가
  • Java double 타입으로 0.1 + 0.1 + ... (10회)를 수행하면 1.0이 아닌 근사값이 누적됨
  • 세율 계산 오차가 대규모 거래에서는 법적·재무적 리스크로 이어질 수 있음
  • BigDecimal은 내부적으로 정수와 소수점 위치를 분리 저장해 임의 정밀도 지원
  • new BigDecimal(0.1): double 리터럴을 받아 이미 부정확한 double 값을 그대로 사용 - 위험
  • BigDecimal.valueOf(0.1): String 변환을 통해 정확한 값 생성 - 권장
  • new BigDecimal("0.1"): String 생성자, 신뢰 가능
  • 통화 계산 시 가장 작은 단위(원 단위 long 타입)로 저장해 소수 연산 자체를 회피하는 전략도 고려
  • 나눗셈 연산은 무한소수 결과가 나올 수 있어 MathContext로 라운딩 모드와 정밀도를 반드시 지정
왜 읽나세금·금융 도메인에서 Java로 정밀 계산을 구현하는 개발자에게 부동소수점 함정과 BigDecimal 올바른 사용법을 간결하게 정리한다.
삼쩜삼
삼쩜삼 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·twilio-engTwilio Engineering·

    Programmable Messaging에서 Verify API로 마이그레이션하기

    Twilio의 Programmable Messaging API로 자체 OTP 솔루션을 운영하던 서비스가 Verify API로 전환하는 방법을 코드 예시와 함께 설명한다. Verify는 OTP 전송·검증을 위한 전용 API로, 전화번호 구매, 토큰 생성, DB 저장·만료 관리를 내부에서 처리해 개발자가 직접 구현할 코드를 크게 줄인다.

    요약 이어보기
    #authentication#twilio#sms+2
  2. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 2부

    포스타입 백엔드 엔지니어가 벡터 기반 개인화 추천 시스템을 실제 운영하며 맞닥뜨린 성능 장애와 용량 문제를 해결한 과정을 담은 2부다. 수백만 개의 벡터 KNN 검색이 피크 시간대에 전체 Elasticsearch 검색 성능을 흔드는 문제부터 클러스터 OOM 사태까지, 쿼리 최적화와 인프라 분리 두 가지 경로로 근본 해결에 이른다.

    요약 이어보기
    #elasticsearch#vector-search#recommendation-system+2
  3. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 1부

    포스타입이 태그 기반 추천의 한계를 극복하고 벡터 임베딩 기반 개인화 추천 시스템을 구축한 과정을 담은 1부다. 유사한 콘텐츠가 다른 용어를 쓰거나 동일한 태그가 전혀 다른 톤의 콘텐츠를 가리키는 문제를 임베딩 벡터로 해결하고, OpenSearch의 HNSW ANN 검색으로 수백만 벡터를 실시간 검색하는 시스템을 구축해 구매율 15% 향상을 달성했다.

    요약 이어보기
    #opensearch#vector-search#recommendation-system+2