É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
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!