Maison > Java > javaDidacticiel > le corps du texte

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

Patricia Arquette
Libérer: 2024-11-12 10:50:02
original
683 Les gens l'ont consulté

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
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal