Maison >Java >javaDidacticiel >Comment puis-je éviter les erreurs d'arrondi lors du calcul avec des doubles en Java ?

Comment puis-je éviter les erreurs d'arrondi lors du calcul avec des doubles en Java ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-22 05:11:14476parcourir

How Can I Avoid Rounding Errors When Calculating with Doubles in Java?

Résoudre les problèmes de double arrondi en Java

En Java, effectuer des calculs avec des nombres à virgule flottante double précision peut parfois conduire à des résultats inattendus en raison de erreurs d'arrondi. Pour résoudre ce problème, il est essentiel de comprendre l'arithmétique à virgule flottante de Java et d'adopter des solutions appropriées.

Lors de la soustraction de valeurs doubles, de petites erreurs d'arrondi peuvent s'accumuler, entraînant des calculs incorrects. Considérez l'extrait de code suivant :

double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d;
double netToCompany = targetPremium.doubleValue() - tempCommission;
double dCommission = request.getPremium().doubleValue() - netToCompany;

Dans cet exemple, le résultat de commission attendu est de 877,85, mais le calcul donne 877,84999999999999 en raison d'erreurs d'arrondi.

Solution : utiliser BigDecimal

Pour garantir des calculs précis, il est recommandé d'utiliser java.math.BigDecimal. Cette classe fournit une arithmétique à virgule flottante de précision qui répond aux limitations des types de données doubles.

Réécriture de la dernière ligne de code à l'aide de BigDecimal :

BigDecimal commission = premium.subtract(netToCompany);

Cette approche élimine les erreurs d'arrondi et produit le bon résultat :

System.out.println(commission + " = " + premium + " - " + netToCompany);

Sortie :

877.85 = 1586.6 - 708.75

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