parseDouble en Java résultats de NumberFormatException
Je suis en train de charger les informations d'un fichier de propriétés, et j'ai le code suivant:
anInt = Integer.parseInt(prop.getProperty("anInt"));
aDouble = Double.parseDouble(prop.getProperty("aDouble"));
et tandis que la première ligne fonctionne bien, à la seconde où je suis en train
pour charger une variable de type double jette un NumberFormatException
. Le d'exception, le message est:
Exception in thread "main" java.lang.NumberFormatException: For input string: "78,5"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
at java.lang.Double.parseDouble(Double.java:510)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:59)
at Assignment1.BaseStation.main(BaseStation.java:83)
Quelle est la valeur de la prop.getProperty("aDouble")?
c'est quelque chose comme 56,5
il doit être un . pas ,.
Et s'il vous plaît, la prochaine fois, donnent aussi le message de l'exception, de sorte que l'on peut le plus facilement voir ce que le problème peut être.
j'ai changé la , à la une . et ça en jette toujours la même exception
c'est quelque chose comme 56,5
il doit être un . pas ,.
Et s'il vous plaît, la prochaine fois, donnent aussi le message de l'exception, de sorte que l'on peut le plus facilement voir ce que le problème peut être.
j'ai changé la , à la une . et ça en jette toujours la même exception
OriginalL'auteur nikos | 2011-11-27
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser un point comme séparateur, pas de virgule, si vous souhaitez analyser à l'aide de
Double.parseDouble()
. Il est dit dans la documentation de la Double classe quiDe Java Language Specification:
Si vous voulez prendre de paramètres régionaux en contrepartie, vous pouvez utiliser
java.text.NumberFormat
:Double.parseDouble()
utilise des définitions en langage Java. Point flottant et littéraux en Java doit périodes d'utilisation, pas de virgules.Aéroglisseur est de droit des valeurs que l'utilisation d'une virgule comme séparateur sont analysés correctement si vous prenez soin de la localisation de réglage.
ne prend pas de paramètres régionaux en considération, vous devez utiliser une autre méthode pour le faire. J'ai déjà cité la documentation, et vous pouvez regarder le code source si vous n'êtes toujours pas à y croire.
j'ai changé les virgules aux périodes mais le problème semble être que lorsque je fais appel prop.getProperty à une ligne qui contient une valeur de type double (par exemple, 42.5) elle retourne un pointeur null et non pas une chaîne "42.5". Des idées?
OriginalL'auteur Malcolm
Si vous souhaitez utiliser "," comme certains pays de l'UE à l'aide. Vous devez soigneusement prendre soin de votre localisation.
Regarder api java http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html
à valueOf, il dit
Par exemple, ce code permettra de résoudre votre problème,
Une chose importante, vous doit pas utiliser quelque chose comme
Car il peut affecter l'ensemble de la JVM. En d'autres termes, cela signifie qu'elle peut avoir sur les autres codes qui sont à l'aide de la localisation. En outre, il peut affecter les autres applications qui sont dans la même JVM si vous utilisez Containner comme Conteneur de Servlet (tels que l'hébergement partagé hébergement).
Et la plupart du temps, quelque chose comme paramètres Régionaux.setDefault() peut être utilisé dans votre ordinateur local, mais vous ne pouvez pas déployer sur les autres serveurs (partagé tomcat hébergement) parce que leur JRE peut-être définir des autorisations pour ne pas permettre de faire une telle méthode. Je suis assez sûr que la plupart des bons fournisseurs d'hébergement. Si vous pouvez déployer ce code sur un partage d'Matous dans tous les fournisseurs d'hébergement, je vous recommande fortement de passer à une autre société d'hébergement.
OriginalL'auteur Surasin Tancharoen
"." est généralement utilisé en tant que séparateur virgule. Si vous voulez coller avec "," vous aurez à changer les paramètres de localisation:
ou de faire usage de la NumberFormat' classe. Il explique vraiment bien int ce stackover flux de fil
C'est vrai, il vaut mieux utiliser "NumberFormat'.
-1:
Locale.setDefault()
n'affectera pasDouble.parseDouble()
, comme il ne prend pas de paramètres régionaux en considération. J'ai cité la documentation dans ma réponse, il est évident à partir de l'OpenJDK code source, et aussi je viens de vérifier sur ma machine.OriginalL'auteur mort