Maison > Java > javaDidacticiel > 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
Libérer: 2024-11-01 16:53:30
original
949 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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!

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