Maison >Java >javaDidacticiel >Comment éviter « ArithmeticException : expansion décimale sans fin » dans la division BigDecimal ?

Comment éviter « ArithmeticException : expansion décimale sans fin » dans la division BigDecimal ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-12 10:50:02723parcourir

How to Avoid

Éviter les expansions décimales sans fin dans la division BigDecimal

La classe BigDecimal de Java est conçue pour faciliter les opérations mathématiques de haute précision, mais elle peut parfois génère une erreur « ArithmeticException : expansion décimale sans fin ; aucun résultat décimal représentable exact ». Cette exception se produit lors de la division de deux objets BigDecimal et que le quotient a une expansion décimale infinie.

Raison de l'exception

Selon la documentation BigDecimal, lorsqu'aucun objet MathContext ( spécifiant la précision et le mode d'arrondi) est fourni, les opérations arithmétiques sont effectuées avec précision. Si le quotient a un développement décimal non final et ne peut pas être représenté exactement, l'exception est levée.

Exemple

BigDecimal a = new BigDecimal("1.6");
BigDecimal b = new BigDecimal("9.2");
a.divide(b) // raises the ArithmeticException

Correction

Pour résoudre le problème, vous pouvez spécifier un objet MathContext avec une précision non nulle et un mode d'arrondi. Par exemple :

a.divide(b, 2, RoundingMode.HALF_UP)

Ici, 2 spécifie l'échelle (nombre de décimales) et RoundingMode.HALF_UP désigne la méthode d'arrondi.

Informations supplémentaires

  • Les objets ArithmeticContext vous permettent de contrôler l'arrondi et la précision de calculs.
  • Si un résultat exact ne peut pas être obtenu, l'opération utilisera le mode d'arrondi spécifié pour se rapprocher du résultat.
  • Reportez-vous à la documentation Java ou à cet article de blog pour plus de détails : https : //blog.frankel.ch/2013/09/avoid-arithmetic-exception-in-java-bigdecimals.html

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn