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
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
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;
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!