환율 정밀도와 반올림

십진수 환율의 정확도를 유지하고 금액 결과는 한 번만 반올림하며, 재현 가능한 Python 예제로 짝수 반올림 방식을 이해합니다.

주판과 통화 토큰 쟁반 옆에 있는 흰색 일각고래.

환율 정밀도는 금액 정밀도와 다릅니다

USD 결과는 소수 둘째 자리까지 표시해도 계산에 사용된 환율은 더 많은 자릿수가 필요할 수 있습니다. 통화 표시 형식에 맞추려고 환율을 잘라내면 모든 환산의 입력이 바뀝니다.

예시 EUR/USD 환율 1.08765로 EUR 250을 환산하면 반올림 전 USD 271.91250, 소수 둘째 자리에서는 USD 271.91입니다. 환율을 먼저 1.09로 반올림하면 USD 272.50이 되어 표시 결과가 59센트 차이 납니다.

정확히 중간인 값에는 짝수 반올림 적용

버리는 부분이 정확히 중간에 해당하면 짝수 반올림은 남기는 마지막 자릿수가 짝수인 쪽을 선택합니다. 소수 둘째 자리까지 반올림하면 1.005는 1.00, 1.015는 1.02가 됩니다. 이는 중간값을 항상 올리는 규칙과 다릅니다.

이는 정확한 십진수 예시입니다. 중간값보다 아주 조금 크거나 작은 값은 정확한 중간값이 아닙니다. 반올림 방식은 서식 함수가 우연히 사용하는 방식에 맡기지 말고 계산 정책의 일부로 정해야 합니다.

십진수 문자열을 직접 파싱하기

Python의 decimal 모듈은 문자열로 십진수 값을 만들고 결과를 지정된 단위의 배수로 반올림할 수 있습니다. 다음 로컬 예시는 금액을 소수 둘째 자리까지 짝수 반올림하는 계산을 재현하며, 실시간 환율을 가져오지 않습니다.

실행 가능한 Python 예제
from decimal import Decimal, ROUND_HALF_EVEN, localcontext

with localcontext() as ctx:
    ctx.prec = 40
    amount = Decimal("250.00")
    rate = Decimal("1.08765")
    result = (amount * rate).quantize(
        Decimal("0.01"), rounding=ROUND_HALF_EVEN
    )

print(result)  # 271.91

통화의 보조 단위 선택하기

모든 대상 통화에 소수 둘째 자리를 적용하지 마세요. Narwhal의 환산 작업은 대상 통화의 ISO 4217 보조 단위를 사용합니다. 예를 들어 문서에 나온 USD-to-JPY 응답은 엔 단위의 정수로 환산 금액을 반환합니다.

현재 통화 메타데이터나 환산 엔드포인트가 반환한 금액을 사용하세요. 현금 액면 단위 반올림, 판매자 표시 규칙, 회계 정책에는 추가 요구 사항이 생길 수 있으므로 환율 정밀도와 별도의 명시적 선택으로 다뤄야 합니다.

피할 수 있는 정밀도 손실 방지하기

십진수 문자열을 이진 부동소수점으로 변환하면 십진수 라이브러리에서 처리하기 전에 정보가 손실될 수 있습니다. API 경계에서 원래 문자열을 유지하고, 지원하는 최대 금액과 환율을 계산하기에 충분한 십진수 연산 정밀도를 선택하세요.

  • 감사와 재현을 위해 수신된 환율 문자열을 보관하세요.
  • 중간 곱셈과 나눗셈은 작업 정밀도로 수행하고 최종 금액을 한 번만 반올림하세요.
  • 반올림 방식과 반올림 단위를 지정하세요.
  • 표시할 때만 서식을 적용하고 서식화된 레이블을 계산에 다시 넣지 마세요.

같은 입력으로 대조하기

로컬 계산 결과가 Narwhal의 converted 필드와 다르면 입력 금액, 반환된 환율의 전체 자릿수, 대상 통화의 보조 단위 및 반올림 방식을 비교하세요. 결과가 틀렸다고 가정하기 전에 이 항목들을 확인하세요.

반올림된 금액을 원래 통화로 다시 환산하면 스프레드가 없어도 작은 차이가 날 수 있습니다. 배치에서는 각 행을 반올림해 더한 결과가 반올림하지 않은 행을 먼저 합한 뒤 한 번 반올림한 결과와 달라질 수도 있습니다. 애플리케이션에 필요한 규칙을 선택하고 일관되게 기록하세요.

출처 및 레퍼런스

게시일: . 최종 검토일: .