> Java > java지도 시간 > Java의 'double' 유형이 재무 계산에서 부정확한 결과를 생성하는 이유는 무엇입니까?

Java의 'double' 유형이 재무 계산에서 부정확한 결과를 생성하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-06 12:51:14
원래의
276명이 탐색했습니다.

Why Does Java's `double` Type Produce Inaccurate Results in Financial Calculations?

Java 이중 계산의 정밀도 문제: 사례 연구

Java에서 배정밀도 부동 소수점 산술을 처리할 때 문제가 발생합니다. 코드 조각에 설명된 것처럼 반올림된 값을 빼면 고유한 정밀도 제한으로 인해 예상치 못한 결과가 발생할 수 있습니다.

구체적으로 문제는 일련의 계산에서 발생합니다.

  • tempCommission: 78.75 (반올림)
  • netToCompany: 708.75 (787.5 - 78.75)
  • dCommission: 877.8499999999999 (1586.6 - 708.75)

dCommission의 예상 결과는 877.85이지만 누적 반올림으로 인해 결과가 잘립니다.

정밀한 야수 길들이기: BigDecimal 소개

이러한 정밀도 문제를 해결하기 위해 Java는 임의 정밀도 십진수 연산을 제공하는 java.math.BigDecimal 클래스를 제공합니다. .

이 경우 코드는 다음과 같이 수정됩니다. 다음과 같습니다:

import java.math.BigDecimal;

BigDecimal premium = BigDecimal.valueOf("1586.6");
BigDecimal netToCompany = BigDecimal.valueOf("708.75");
BigDecimal commission = premium.subtract(netToCompany);
System.out.println(commission + " = " + premium + " - " + netToCompany);
로그인 후 복사

BigDecimal을 사용하면 결과가 정확하게 계산되어 표시됩니다.

877.85 = 1586.6 - 708.75
로그인 후 복사

결론

정밀도에 민감한 경우 Java 계산에서는 부동 소수점 연산의 함정을 피하기 위해 BigDecimal을 활용하는 것이 중요합니다. 임의의 정밀도 기능을 수용함으로써 개발자는 위에 설명된 것과 같은 복잡한 시나리오에서도 정확하고 신뢰할 수 있는 결과를 보장할 수 있습니다.

위 내용은 Java의 'double' 유형이 재무 계산에서 부정확한 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿