> Java > java지도 시간 > 본문

'BigDecimal' 나누기가 종료되지 않는 소수에 대해 'ArithmeticException'을 발생시키는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-12 14:02:01
원래의
907명이 탐색했습니다.

Why Does `BigDecimal` Division Throw an `ArithmeticException` for Non-Terminating Decimals?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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