Maison  >  Article  >  Java  >  Comment éviter les erreurs de précision en virgule flottante en Java : flotteurs, doubles et BigDecimal

Comment éviter les erreurs de précision en virgule flottante en Java : flotteurs, doubles et BigDecimal

Susan Sarandon
Susan Sarandonoriginal
2024-11-18 04:43:02766parcourir

How to Avoid Floating Point Precision Errors in Java: Floats, Doubles, and BigDecimal

Éviter les erreurs de précision en virgule flottante avec les flottants et les doubles en Java

Lorsque vous travaillez avec de grandes sommes de flottants ou de doubles en Java, accumuler des virgules flottantes des erreurs de précision peuvent être un problème. Cette erreur est due à l'incapacité des flottants ou des doubles à représenter avec précision certaines valeurs numériques, telles que 0,1.

Considérez le code suivant :

for (float value = 0.0f; value < 1.0f; value += 0.1f) {
    System.out.println(value);
}

Sortie attendue :

0.1
0.2
0.3
...
0.9

Sortie réelle :

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

Comme évident, la sortie s'écarte des valeurs attendues en raison d'inexactitudes en virgule flottante. Pour résoudre ce problème, il existe deux approches principales :

1. Ajustez la précision de l'affichage et autorisez les tolérances

Lors de l'utilisation du type double, limitez l'affichage au nombre requis de chiffres et introduisez une petite tolérance pour les contrôles d'égalité. Cela permet la représentation de nombres tels que 0,1 sans erreurs d'arrondi significatives.

2. Utilisez BigDecimal pour une représentation précise

Vous pouvez également envisager d'utiliser BigDecimal au lieu de flottants ou de doubles. BigDecimal fournit un moyen de représenter des nombres avec une précision arbitraire, éliminant les erreurs d'arrondi et permettant une représentation exacte de valeurs comme 0,1.

Vous trouverez ci-dessous un exemple utilisant BigDecimal :

BigDecimal step = new BigDecimal("0.1");
for (BigDecimal value = BigDecimal.ZERO;
     value.compareTo(BigDecimal.ONE) < 0;
     value = value.add(step)) {
    System.out.println(value);
}

Ce code s'imprimera :

0.1
0.2
0.3
...
0.9

En choisissant l'approche appropriée, les développeurs peuvent minimiser ou éliminer efficacement les erreurs de précision en virgule flottante lorsqu'ils travaillent avec des flottants ou des doubles en Java.

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