Maison > Java > javaDidacticiel > le corps du texte

Comment puis-je éviter les erreurs d'arrondi lors du décalage des décimales en Java à l'aide des types de données DoubleDouble ?

Barbara Streisand
Libérer: 2024-11-24 19:24:16
original
976 Les gens l'ont consulté

How Can I Avoid Rounding Errors When Shifting Decimal Places in Java Using DoubleDouble Data Types?

Les erreurs d'arrondi dans le "Déplacement des décimales" avec Double

Les types de données doubles en Java peuvent parfois conduire à des inexactitudes lors de l'exécution d'opérations mathématiques. Lorsque vous tentez de déplacer une décimale, comme illustré dans la question, des erreurs d'arrondi peuvent se produire.

Le problème vient du fait que les nombres à virgule flottante double précision ne peuvent pas représenter exactement tous les nombres réels. Dans ce cas, tenter de multiplier par 0,1 deux fois introduit des erreurs de composition.

Solution utilisant la division entière :

Pour éviter ces erreurs, il est recommandé d'utiliser plutôt la division entière . En divisant par 100, vous pouvez effectivement décaler la décimale sans introduire d'erreurs d'arrondi.

double x = 1234;
x /= 100;
System.out.println(x); // Prints 12.34
Copier après la connexion

Arrondi et erreurs d'arrondi :

Il est important de noter que des arrondis peuvent encore se produire dans certains cas, mais ils sont beaucoup moins significatifs. Double.toString() effectue un arrondi minimal, mais si vous souhaitez éviter tout arrondi, il est préférable d'utiliser BigDecimal.

Comparaison de la division et de la multiplication :

Bien que la division et la multiplication décalent effectivement la décimale, elles gèrent différemment les erreurs d’arrondi. La division par 100 entraîne des erreurs d'arrondi qui dépendent de la valeur de x, tandis que la multiplication par 0,01 introduit une erreur d'arrondi fixe.

Par exemple, le code suivant montre les différentes erreurs d'arrondi :

for (int i = 0; i < 200; i++) {
    double d1 = (double) i / 100;
    double d2 = i * 0.01;
    if (d1 != d2)
        System.out.println(d1 + " != " + d2);
}
Copier après la connexion

Le résultat montre que certaines valeurs sont arrondies différemment selon la méthode utilisé.

Conclusion :

Lorsque vous travaillez avec des nombres à virgule flottante, il est important d'être conscient du potentiel d'erreurs d'arrondi. L'utilisation d'une division entière ou de BigDecimal peut aider à minimiser ces erreurs pour garantir des résultats plus précis.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal