Comment puis-je convertir une Chaîne en Double en Java à l'aide des paramètres régionaux spécifiques?
Je veux convertir quelques chiffres que j'ai obtenu comme des chaînes de caractères en Double, mais ces chiffres ne sont pas dans la norme américaine régionaux, mais dans une autre. Comment puis-je le faire?
- J'ai six réponses, seulement deux d'entre eux upvoted, mais elles sont TOUTES correctes. Les lauriers aller à l'intégrale de réponse.
Vous devez vous connecter pour publier un commentaire.
Essayer
java.texte.NumberFormat
. À partir de la documentation Javadoc:parse()
renvoie uneNombre
; donc, pour obtenir undouble
, vous devez appelermyNumber.doubleValue()
:Noter que
parse()
ne reviendra jamaisnull
, donc ce ne peut pas provoquer uneNullPointerException
. Au lieu de cela,parse
jette un activéeParseException
si elle échoue.Edit: j'ai d'abord dit qu'il y avait une autre façon de convertir
double
: cast le résultat deDouble
et l'utilisation unboxing. Je pensais que depuis un exemple deNumberFormat
a été utilisé (par la JavadocgetInstance
), il serait toujours retourner uneDouble
. Mais DJClayworth souligne que la Javadocparse(String, ParsePosition)
(qui est appelée parparse(String)
) dire qu'unLong
est retournée, si possible. Par conséquent, casting le résultat deDouble
est dangereux et ne doit pas être tenté!Merci, DJClayworth!
NumberFormat est le chemin à parcourir, mais vous devez être conscient de ses particularités qui surgissent lors de vos données est inférieure à 100% correct.
J'ai trouvé le suivant utile:
http://www.ibm.com/developerworks/java/library/j-numberformat/index.html
Si votre entrée peut être de confiance, alors vous n'avez pas à vous inquiéter à ce sujet.
Vous utilisez un
NumberFormat
. Ici est un exemple, qui je pense est correct.De l'apprentissage de java et de la programmation. A la même question. Trouvé quelque chose comme ça dans mon manuel:
Le livre dit qu'un scanner automatiquement décode ce qui est dans une Chaîne variabel et que le Scanner de classe s'adapte automatiquement à la langue de l'ensemble de paramètres Régionaux, Régionaux système par défaut, mais aussi facile à mettre à autre chose.
J'ai résolu mon problème de cette façon. Cela pourrait peut-être travailler pour le problème ci-dessus, au lieu de l'analyse?
Plus: La raison pour laquelle j'ai aimé cette méthode est le fait que lors de l'utilisation de swing dialouge boîtes pour l'entrée et ensuite essayer de le convertir la chaîne en double avec parse j'ai eu un NumberFormatException. Il s'est avéré que d'analyser utilise exclusivement NOUS-numéro de mise en forme Scanner permet de gérer tous les formats. Scanner de l'entrée de fonctionner parfaitement même avec la virgule (,) séparateur décimal. Depuis le plus de vote jusqu'réponse utilise analyser je ne vois vraiment pas comment il permettrait de résoudre ce problème particulier. Vous avez plus qu'à saisir vos numéros au format AMÉRICAIN et ensuite les convertir en fonction de vos paramètres régionaux de format. C'est plutôt gênant quand numériques keybord est équipée avec une virgule.
Vous êtes maintenant libre de me déchiqueter en morceaux 😉
A parser that parses a text string of primitive types and strings with the help of regular expressions. This class is not as useful as it might seem. It's very inefficient for communicating between machines; you should use JSON, protobufs, or even XML for that. Very simple uses might get away with String#split. For input from humans, the use of locale-specific regular expressions make it not only expensive but also somewhat unpredictable.
Cela ne devrait poser aucun problème à l'aide de java.texte.DecimalFormat.
Utilisation NumberFormat.getNumberInstance(paramètres Régionaux)
Vous ne savez pas quels paramètres régionaux il est? Ensuite, vous pouvez utiliser
ce sera même travail pour les scientifiques, les notations, les chaînes avec des signes de pourcentage ou de chaînes de caractères avec des symboles de devise.
Ici est de savoir comment vous utilisez
parseDouble
pour convertir unString
à unDouble
:doubleExample.java
parseDouble
utilise les mêmes règles quevalueOf
, qui sont Java Langue double format. Cela signifie qu'il ne sera pas analyser1,0
comme double, peu importe la localisation en cours. Et, de plus, il n'y a pas de moyen de passer un certains paramètres régionaux, comme l'avait demandé (ce qui est logique, puisqu'il n'utilise pas les paramètres régionaux).