À 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.