> Java > java지도 시간 > BigDecimal Division에서 'ArithmeticException: 비종료 소수점 확장'을 피하는 방법은 무엇입니까?

BigDecimal Division에서 'ArithmeticException: 비종료 소수점 확장'을 피하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-12 10:50:02
원래의
708명이 탐색했습니다.

How to Avoid

BigDecimal 나눗셈에서 종료되지 않는 소수 확장 방지

Java의 BigDecimal 클래스는 고정밀 수학 연산을 용이하게 하도록 설계되었지만 때로는 "ArithmeticException: 비종료 소수점 확장, 정확하게 표현할 수 있는 소수점 결과 없음" 오류가 발생합니다. 이 예외는 두 개의 BigDecimal 객체를 나눌 때 발생하며 몫은 무한한 소수 확장을 갖습니다.

예외 이유

BigDecimal 문서에 따르면 MathContext 객체( 정밀도 및 반올림 모드 지정)이 제공되면 산술 연산이 정확하게 수행됩니다. 몫에 끝이 없는 소수 확장이 있고 정확하게 표현할 수 없는 경우 예외가 발생합니다.

BigDecimal a = new BigDecimal("1.6");
BigDecimal b = new BigDecimal("9.2");
a.divide(b) // raises the ArithmeticException
로그인 후 복사

수정

문제를 해결하려면 0이 아닌 정밀도와 반올림 모드를 사용하여 MathContext 객체를 지정할 수 있습니다. 예:

a.divide(b, 2, RoundingMode.HALF_UP)
로그인 후 복사

여기서 2는 소수 자릿수를 지정하고 RoundingMode.HALF_UP은 반올림 방법을 나타냅니다.

추가 정보

  • ArithmeticContext 개체를 사용하면 계산의 반올림 및 정밀도를 제어할 수 있습니다.
  • 정확한 결과를 얻을 수 없는 경우 작업에서는 지정된 반올림 모드를 사용하여 결과를 근사화합니다.
  • 자세한 내용은 Java 문서 또는 다음 블로그 게시물을 참조하세요. https://blog.frankel.ch/2013/09/avoid-arithmetic-Exception-in-java-bigdecimals.html

위 내용은 BigDecimal Division에서 'ArithmeticException: 비종료 소수점 확장'을 피하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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