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!