2012-06-28 1 views
3

Est-ce que la déclaration suivante est valable pour tout sauf NaNdouble (Java double précision primitive IEEE-754):de précision pour Double.parseDouble() et String.valueOf()

Double.parseDouble(String.valueOf(d)) == d 

Dit autrement, n'analyse d'une sérialisé (en utilisant String.valueOf()) double valeur donne toujours le double original exact?

Répondre

3

À l'exception de NaN comme vous l'avez dit, oui, cet invariant devrait tenir. Sinon, c'est un bug JDK juste là.

Double.toString dit ceci dans son Javadoc:

Combien de chiffres doit être imprimé pour la partie fractionnaire de m ou? Il doit y avoir au moins un chiffre pour représenter la partie fractionnaire, et au-delà autant, mais seulement autant, plus de chiffres que nécessaire pour distinguer de façon unique la valeur de l'argument des valeurs adjacentes de type double. C'est-à-dire, supposons que x est la valeur mathématique exacte représentée par la représentation décimale produite par cette méthode pour un argument fini non nul d. Alors d doit être la valeur double la plus proche de x; ou si deux valeurs doubles sont également près de x, alors d doit être l'un d'entre eux et le moins significatif de la mantisse de d doit être 0.

Pour résumer, il retourne suffisamment de chiffres pour identifier ce double , donc Double.parseDouble devrait retourner exactement le même double qui a été converti en une chaîne.

Questions connexes