プロパティファイルから情報を読み込もうとしていますが、次のコードがあります。
anInt = Integer.parseInt(prop.getProperty("anInt"));
aDouble = Double.parseDouble(prop.getProperty("aDouble"));
最初の行は問題なく機能しますが、double変数をロードしようとしている2番目の行はNumberFormatException
をスローします。特定の例外メッセージは次のとおりです。
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)
Double.parseDouble()
を使用して解析する場合は、カンマではなくピリオドを区切り文字として使用する必要があります。 Doubleクラスのドキュメントには、
FloatingPointLiteral ... [is] Java言語仕様のの字句構造セクションで定義されているとおりです。
From Java言語仕様:
FloatingPointLiteral:
- 数字。数字opt ExponentPart opt FloatTypeSuffix opt
- 。 Digits ExponentPart opt FloatTypeSuffix opt
- Digits ExponentPart FloatTypeSuffix opt
- Digits ExponentPart opt FloatTypeSuffix
ロケールを考慮したい場合は、Java.text.NumberFormat
を使用できます。
NumberFormat nf = NumberFormat.getInstance();
double number = nf.parse(myString).doubleValue();
一部のEU諸国が使用しているように、「、」を使用する場合。ローカリゼーションには注意が必要です。
Java api http://docs.Oracle.com/javase/7/docs/api/Java/lang/Double.html を見てください
valueOfで、それは言った
To interpret localized string representations of a floating-point value, use subclasses of NumberFormat.
たとえば、このコードは問題を解決します。
NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
double number = nf.parse(myString).doubleValue();
重要なことの1つは、あなたはのようなものを使用してはならないということです
Locale.setDefault(something);
JVM全体に影響を与える可能性があるためです。つまり、ローカリゼーションを使用している他のコードに影響を与える可能性があるということです。さらに、サーブレットコンテナ(共有Tomcatホスティングなど)などのコンテナを使用している場合は、同じJVMにある他のアプリに影響を与える可能性があります。
そしてほとんどの場合、Locale.setDefault()のようなものはローカルコンピューターで使用できますが、他のサーバー(共有Tomcatホスティング)にはJREが許可を設定している可能性があるため、デプロイできませんそのような方法を許可しないようにします。私は、優れたホスティングプロバイダーのほとんどがこれを行ったと確信しています。このようなコードをホスティングプロバイダーの共有Tomcatにデプロイできる場合は、別のホスティング会社に変更することを強くお勧めします。
「。」通常、カンマ区切り文字として使用されます。 「、」を使用したい場合は、ローカリゼーション設定を変更する必要があります。
Locale.setDefault(Locale.GERMAN); //German will do the trick, better to use your country code
または、「NumberFormat」クラスを利用します。それは本当によく説明されています このスタックオーバーフロースレッドで