La conversion d'une primitive float en une primitive double peut introduire une perte de précision apparente. Ce phénomène est souvent attribué à la précision « supplémentaire » du double, mais il est en réalité dû à la capacité limitée du flotteur à représenter certains nombres avec précision.
Dans l'exemple suivant, convertir un flotteur en double entraîne l'introduction de chiffres :
float temp = 14009.35F; System.out.println(Float.toString(temp)); // 14009.35 System.out.println(Double.toString((double)temp)); // 14009.349609375
Une solution de contournement consiste à convertir le flottant en chaîne, puis à analyser la chaîne comme un double, qui conserve la valeur d'origine :
System.out.println(Double.toString(Double.parseDouble(Float.toString(temp)))); // 14009.35
Il est important de noter que les chiffres "supplémentaires" ne sont pas réellement ajoutés par la double primitive. Le flotteur ne représentait tout simplement pas le nombre avec précision. Le double représente fidèlement la valeur du flottant d'origine.
La conversion en chaîne et inversement donne une valeur double plus proche de la représentation sous forme de chaîne, mais il est important de vérifier que cela est réellement souhaitable.
Dans les situations où des valeurs décimales précises sont requises (par exemple, calculs monétaires), envisagez d'utiliser le type BigDecimal au lieu de float ou double, car il garantit une représentation plus précise des nombres décimaux.
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!