Maison >Java >javaDidacticiel >Pourquoi BigDecimal de Java lance-t-il une exception ArithmeticException pour les extensions décimales sans fin ?

Pourquoi BigDecimal de Java lance-t-il une exception ArithmeticException pour les extensions décimales sans fin ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-15 10:11:02882parcourir

Why Does Java's BigDecimal Throw an ArithmeticException for Non-Terminating Decimal Expansions?

ArithmeticException en raison d'une expansion décimale sans fin

Lors de l'exécution d'une opération de division à l'aide de la classe BigDecimal de Java, vous pouvez rencontrer l'exception suivante :

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

Cette erreur se produit lorsque l'opération de division aboutit à un quotient décimal avec une expansion infiniment longue. Par défaut, les opérations BigDecimal sont exactes, ce qui signifie qu'elles produisent le résultat mathématique exact sans arrondi.

Cependant, la méthode Divide renvoie une ArithmeticException lorsque le résultat a une expansion décimale non terminale et qu'un résultat exact est attendu (c'est-à-dire , lorsque le paramètre de précision de l'objet MathContext utilisé est 0).

Pour résoudre ce problème, vous pouvez spécifier un paramètre de précision non nul pour le Objet MathContext. Cela forcera le résultat à être arrondi à un nombre spécifié de décimales :

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

Dans ce cas, 2 est l'échelle (nombre de décimales) et RoundingMode.HALF_UP est le mode d'arrondi à utiliser . En spécifiant une précision, vous pouvez obtenir un résultat décimal fini et représentable.

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