Maison >Java >javaDidacticiel >Pourquoi la double soustraction en Java conduit-elle à des résultats inexacts et comment BigDecimal peut-il résoudre ce problème ?

Pourquoi la double soustraction en Java conduit-elle à des résultats inexacts et comment BigDecimal peut-il résoudre ce problème ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-02 01:05:11596parcourir

Why Does Double Subtraction in Java Lead to Inaccurate Results, and How Can BigDecimal Solve This?

Comment résoudre un problème de double arrondi Java

Lorsque vous travaillez avec des doubles, des inexactitudes de précision peuvent survenir, conduisant à des résultats de calcul inattendus. L'un de ces problèmes est l'arrondi qui se produit lors d'une double soustraction, comme illustré dans l'extrait de code fourni.

Dans cet exemple, la soustraction de tempCommission de targetPremium donne une valeur de 708,75, alors que la valeur attendue est de 708,76. Cette différence est due à l'utilisation de nombres à virgule flottante double précision, qui présentent des limites inhérentes à leur précision.

Pour résoudre ce problème et garantir des calculs corrects, pensez à utiliser la classe java.math.BigDecimal, qui fournit une arithmétique décimale précise. BigDecimal offre un meilleur contrôle sur la précision des opérations à virgule flottante, éliminant les erreurs d'arrondi associées à la double soustraction.

Dans l'extrait de code révisé, BigDecimal est utilisé pour effectuer la soustraction de netToCompany de premium, ce qui donne le résultat attendu. valeur de 877,85. Cela démontre l'efficacité de BigDecimal dans la gestion de calculs décimaux précis, éliminant les problèmes d'arrondi rencontrés avec les doubles :

import java.math.BigDecimal;

BigDecimal premium = BigDecimal.valueOf("1586.6");
BigDecimal netToCompany = BigDecimal.valueOf("708.75");
BigDecimal commission = premium.subtract(netToCompany);
System.out.println(commission + " = " + premium + " - " + netToCompany);

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