Maison > Java > javaDidacticiel > Pourquoi lancer un flotteur vers un double semble-t-il réduire la précision ?

Pourquoi lancer un flotteur vers un double semble-t-il réduire la précision ?

DDD
Libérer: 2024-11-01 07:48:02
original
688 Les gens l'ont consulté

Why Does Casting a Float to a Double Seem to Reduce Precision?

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

Dans certains scénarios, le simple fait de convertir un flotteur en double peut entraîner une précision apparemment incorrecte. Ce comportement inattendu n'est pas dû au fait que le double a une précision accrue, mais plutôt au fait que la précision du flotteur ne reflète pas avec précision la valeur souhaitée.

Pour comprendre ce concept, considérons l'exemple :

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

Alors que la représentation sous forme de chaîne du flottant semble avoir la précision souhaitée, la représentation sous forme de chaîne du double affiche avec précision la valeur stockée dans le flottant. La différence vient du fait que la valeur interne du flottant n'a jamais vraiment été de 14009,35 mais plus proche de 14009,349609375. Convertir le flotteur en double expose simplement la précision sous-jacente.

La conversion en chaîne et inversement peut sembler une solution viable, car elle semble maintenir la précision souhaitée :

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

Cependant , cette approche introduit un problème potentiel. Si la représentation sous forme de chaîne n'est pas vraiment précise, le double résultant sera toujours inexact, bien qu'avec une précision différente.

Par conséquent, il est crucial d'évaluer l'adéquation de l'utilisation de float et double pour des exigences numériques spécifiques. Dans les cas où des valeurs décimales précises sont nécessaires, BigDecimal peut être un choix plus approprié. BigDecimal permet une précision arbitraire, éliminant les pièges potentiels des limitations du flotteur et de la double représentation.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal