ArithmeticException: Non-Terminating Division
제공된 코드 조각은 두 개의 BigDecimal 객체(a 및 b)를 나누려고 시도합니다. ). 그러나 이 작업으로 인해 다음과 같은 예외가 발생합니다.
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
이 예외를 해결하려면 BigDecimal 산술의 복잡한 세부 사항을 조사해야 합니다.
정확한 산술의 본질
Java 11 BigDecimal 문서에 명시된 대로 MathContext 객체의 정밀도가 0(예: MathContext.UNLIMITED)으로 설정된 경우 산술 연산(MathContext 없는 나누기 포함)이 정확한 결과를 산출합니다. 이는 5 이전 릴리스의 유일한 동작이었습니다.
무한 소수 확장 및 정확성
정확한 결과를 계산한 결과 MathContext 개체의 반올림 모드 설정이 정밀도가 0이면 관련이 없습니다. 나누기 연산의 경우 몫은 1을 3으로 나눈 것과 같이 무한 소수점 확장을 가질 수 있습니다.
비종료 확장 처리
몫에 -십진수 확장을 종료하고 정확한 결과를 반환하기 위해 작업이 필요한 경우 ArithmeticException이 발생합니다. 반대로, 결과가 유한하면 정확한 몫이 반환됩니다.
비종료 분할에 대한 솔루션
이 문제를 해결하려면 다음과 같은 방법을 사용할 수 있습니다.
a.divide(b, 2, RoundingMode.HALF_UP)
여기서 2는 배율을 나타내고 RoundingMode.HALF_UP은 반올림 방법을 지정합니다.
추가 리소스
자세한 내용은 이해하려면 Java 11 BigDecimal 문서와 통찰력 있는 블로그 게시물을 참조하세요.
위 내용은 'BigDecimal' 나누기가 종료되지 않는 소수에 대해 'ArithmeticException'을 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!