Gérer les extensions décimales sans fin et BigDecimal
Lorsque vous travaillez avec des objets BigDecimal, il est important d'être conscient du potentiel de non- terminer les expansions décimales. Considérons le code suivant :
BigDecimal a = new BigDecimal("1.6"); BigDecimal b = new BigDecimal("9.2"); a.divide(b)
Ce code tente de diviser les deux objets BigDecimal, mais génère à la place l'exception suivante :
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
Cette exception est levée car le quotient exact d'un et b a une expansion décimale non terminale. Par défaut, les opérations BigDecimal sont exactes, ce qui signifie qu'elles renvoient le résultat exact même s'il a une expansion décimale infinie. Cependant, lorsque la précision est définie sur 0 (comme c'est le cas par défaut), le mode d'arrondi est ignoré et aucun arrondi n'est effectué.
Pour corriger cette exception, vous devez spécifier un mode d'arrondi et une précision. Par exemple :
a.divide(b, 2, RoundingMode.HALF_UP)
Dans ce cas, la division sera effectuée avec une précision de 2 et le résultat sera arrondi grâce au mode d'arrondi HALF_UP. Cela entraînera une expansion décimale finie.
Pour plus d'informations sur la gestion des expansions décimales sans fin avec BigDecimal, reportez-vous à la documentation Java ou aux ressources pertinentes telles que les articles de blog et les didacticiels.
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!