Maison > Java > javaDidacticiel > Pourquoi la conversion d'un flottant en double introduit-elle des problèmes de précision ?

Pourquoi la conversion d'un flottant en double introduit-elle des problèmes de précision ?

Patricia Arquette
Libérer: 2024-11-03 08:33:30
original
364 Les gens l'ont consulté

Why Does Converting a Float to a Double Introduce Precision Issues?

Préserver la précision lors de la conversion d'un flottant en double

Lorsqu'ils tentent de convertir un flottant primitif en un double primitif, les utilisateurs peuvent rencontrer des écarts de précision inattendus. Le simple fait de convertir le float en double introduit une précision parasite, comme illustré dans l'exemple ci-dessous :

float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double) temp)); // Prints 14009.349609375
Copier après la connexion

Cependant, analyser un float comme une chaîne, puis analyser la chaîne résultante comme un double donne la précision souhaitée :

System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35
Copier après la connexion

Comprendre l'écart de précision

Il est crucial de noter que le gain apparent de précision n'est pas réel. Le flotteur ne représentait pas avec précision le nombre prévu initialement. Le double converti reflète avec précision la valeur d'origine du float, tandis que toString() révèle la précision « supplémentaire » qui était toujours présente mais cachée.

Par exemple, considérons le scénario fictif suivant :

float f = 0.1F;
double d = f;
Copier après la connexion

Dans ce cas, la valeur de f pourrait être précisément 0,100000234523. d contiendra la même valeur, mais une fois converti en chaîne, il assumera une plus grande précision et affichera les chiffres supplémentaires déjà présents.

Conversion de chaîne comme solution de contournement

La conversion en chaîne et inversement peut entraîner une valeur double plus proche du nombre souhaité que le nombre flottant d'origine, mais cette solution de contournement n'est valide que si la valeur de chaîne représente avec précision le nombre souhaité.

Données alternatives Considérations sur le type

Les utilisateurs doivent évaluer si float/double conviennent à leur cas d'utilisation. Si des valeurs décimales précises sont requises (par exemple, pour des calculs financiers), BigDecimal peut être un type de données plus approprié.

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