Maison  >  Article  >  Java  >  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
DDDoriginal
2024-11-01 07:48:02605parcourir

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

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

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!

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