Maison  >  Article  >  Java  >  Pourquoi la conversion d'un flottant en double semble-t-elle parfois perdre en précision ?

Pourquoi la conversion d'un flottant en double semble-t-elle parfois perdre en précision ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-01 16:53:30831parcourir

Why Does Converting a Float to a Double Sometimes Appear to Lose Precision?

Préserver la précision lors de la conversion de Float en Double

Problème

La conversion d'une primitive float en une primitive double peut introduire une perte de précision apparente. Ce phénomène est souvent attribué à la précision « supplémentaire » du double, mais il est en réalité dû à la capacité limitée du flotteur à représenter certains nombres avec précision.

Dans l'exemple suivant, convertir un flotteur en double entraîne l'introduction de chiffres :

float temp = 14009.35F;
System.out.println(Float.toString(temp)); // 14009.35
System.out.println(Double.toString((double)temp)); // 14009.349609375

Solution d'analyse

Une solution de contournement consiste à convertir le flottant en chaîne, puis à analyser la chaîne comme un double, qui conserve la valeur d'origine :

System.out.println(Double.toString(Double.parseDouble(Float.toString(temp)))); // 14009.35

Considérations sur la précision

Il est important de noter que les chiffres "supplémentaires" ne sont pas réellement ajoutés par la double primitive. Le flotteur ne représentait tout simplement pas le nombre avec précision. Le double représente fidèlement la valeur du flottant d'origine.

La conversion en chaîne et inversement donne une valeur double plus proche de la représentation sous forme de chaîne, mais il est important de vérifier que cela est réellement souhaitable.

Alternative BigDecimal

Dans les situations où des valeurs décimales précises sont requises (par exemple, calculs monétaires), envisagez d'utiliser le type BigDecimal au lieu de float ou double, car il garantit une représentation plus précise des nombres décimaux.

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