Java 반올림 이중 이상 현상을 극복하는 방법
Java에서는 부동 소수점 계산으로 인해 예상치 못한 반올림 문제가 발생할 수 있습니다. 설명을 위해 다음 코드를 살펴보겠습니다.
double tempCommission = targetPremium.doubleValue() * rate.doubleValue() / 100d; double netToCompany = targetPremium.doubleValue() - tempCommission; double dCommission = request.getPremium().doubleValue() - netToCompany;
dCommission의 예상 값은 877.85이지만 실제 결과는 877.8499999999999로 약간 부정확합니다. 이 문제를 해결하려면 보다 정확한 계산이 필요합니다.
해결책은 java.math.BigDecimal을 활용하는 것입니다. 이 클래스는 부동 소수점 산술 정밀도에 대한 제어를 제공합니다. 다음은 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의 Double이 부정확한 반올림을 생성하는 이유는 무엇이며 BigDecimal은 이를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!