Maison > Java > javaDidacticiel > Erreur d'arrondi en Java

Erreur d'arrondi en Java

WBOY
Libérer: 2023-08-19 15:05:18
avant
688 Les gens l'ont consulté

Erreur darrondi en Java

Lors de l'écriture de codes, nous faisons tous diverses erreurs qui nous conduisent à des erreurs telles que des erreurs de débordement et des erreurs de syntaxe. L'erreur d'arrondi est l'une des erreurs courantes qui peuvent entraîner une mauvaise solution pour un problème mathématique donné. une erreur se produit lorsque nous travaillons avec des nombres à virgule flottante.

Dans cet article, nous explorerons les causes de ce problème et essaierons de trouver un moyen de nous débarrasser de cette erreur.

Erreur d'arrondi

Types à virgule flottante

Ils sont également appelés nombres réels et sont utilisés lorsque les calculs nécessitent des valeurs fractionnaires. Il représente un nombre avec un point décimal. Par exemple, pour exprimer le résultat de 1/5, qui est 0,2, les résultats du sinus et du cosinus nécessitent également un point décimal.

En Java, il existe deux types de nombres à virgule flottante -

  • Point flottant - Il peut stocker des valeurs en simple précision jusqu'à 32 bits. Nous le déclarons en utilisant le mot-clé 'float'.

  • Double - Sa taille est plus grande que float et peut stocker des valeurs en double précision jusqu'à 64 bits. Il est déclaré à l'aide du mot-clé 'double'.

Discutons d'un exemple où nous pouvons rencontrer une erreur d'arrondi, puis nous comprendrons la raison et fournirons une solution pour la gérer correctement.

Exemple 1

public class Main{
   public static void main(String[] args) {
      double data1 = 0.30;
      double data2 = 0.20 + 0.10;
      System.out.println("Value after addition: " + data2);
      System.out.println(data1 == data2);
      double data3 = 0.50;
      double data4 = 0.10 + 0.10 + 0.10 + 0.10 + 0.10;
      System.out.println("Value after addition: " + data4);
      System.out.println(data3 == data4);
   }
} 
Copier après la connexion

Sortie

Value after addition: 0.30000000000000004
false
Value after addition: 0.5
true
Copier après la connexion

Dans le code ci-dessus, lorsque nous l'ajoutons pour la première fois, la valeur attendue de « data2 » est de 0,30, mais le résultat de sortie est faux. Cependant, lorsque nous effectuons une autre opération d’addition similaire, nous obtenons le résultat exact.

Prenons un autre exemple qui montre une erreur.

La traduction chinoise de

Exemple 2

est :

Exemple 2

public class Main {
   public static void main(String[] args) {
      double data1 = 4.30452;
      double data2 = 0.503542;
      double res = data1 + data2;
      System.out.println("Value after addition: " + res);
   }
}
Copier après la connexion

Sortie

Value after addition: 4.8080620000000005
Copier après la connexion

La sortie attendue est 4,808062, mais nous obtenons ici une mauvaise sortie.

Raison des erreurs

Le « IEEE 754 » est une norme suivie par Java lors de l'implémentation des nombres à virgule flottante. Selon sa règle « d'arrondi », lorsque la valeur de la mantisse est supérieure à 23 bits, il ajoute 1 au 23ème bit pour arrondir la valeur. . Ici, la mantisse est la représentation binaire de chiffres fractionnaires.

C'est pourquoi nous obtenons des valeurs différentes.

Comment résoudre l'erreur

Afin d'éviter cette erreur d'arrondi, nous disposons des méthodes suivantes -

  • BigDecimal - C'est une classe qui peut être utilisée à la place des nombres à virgule flottante comme float et double. Nous pouvons effectuer toutes les opérations normales fournies par les types de données float et double. Par exemple, les opérations arithmétiques, la comparaison et l'arrondi. Il peut gérer ces opérations avec une précision précise.

L'exemple suivant montre comment nous pouvons l'utiliser pour produire un résultat précis.

Exemple 3

import java.math.*;
public class Main{
   public static void main(String[] args) {
      BigDecimal data1 = new BigDecimal("0.20");
      BigDecimal data2 = new BigDecimal("0.10");
      BigDecimal res = data1.add(data2); // performing addition
      System.out.println("Value after addition: " + res);
   }
}
Copier après la connexion

Sortie

Value after addition: 0.30
Copier après la connexion

Dans l'exemple 1, nous avons obtenu une erreur lors de l'ajout de deux valeurs. Dans l'exemple ci-dessus, nous avons utilisé les mêmes valeurs mais cette fois nous avons obtenu le résultat correct.

  • Math.round() - C'est une méthode statique de classe 'Math'. Il prend une valeur à virgule flottante comme argument et renvoie la valeur entière la plus proche. Nous l'appelons en utilisant son nom de classe.

L'exemple ci-dessous illustre son utilisation dans le programme.

Exemple 4

public class Main {
   public static void main(String[] args) {
      double data1 = 4.30452;
      double data2 = 0.503542;
      double res = data1 + data2;
      System.out.println("Value after addition: " + res);
      System.out.println("Value after rounding off the addition: " + Math.round(res));
   }
}
Copier après la connexion

Sortie

Value after addition: 4.8080620000000005
Value after rounding off the addition: 5
Copier après la connexion

Conclusion

L'erreur d'arrondi n'est pas une erreur de compilation ou d'exécution, le compilateur Java ne peut pas la détecter. C'est la raison pour laquelle le programmeur doit accorder une attention particulière à ces erreurs, sinon nous obtiendrons un résultat erroné. la raison et a également suggéré quelques moyens de surmonter cette erreur d'arrondi.

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!

Étiquettes associées:
source:tutorialspoint.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal