11

プロパティファイルから情報を読み込もうとしていますが、次のコードがあります。

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)
4

3 に答える 3

20

を使用して解析する場合は、カンマではなく、区切り文字としてピリオドを使用する必要がありますDouble.parseDouble()。Doubleクラスのドキュメントには、

FloatingPointLiteral ... [is]は、Java言語仕様のの字句構造セクションで定義されています。

Java言語仕様から:

FloatingPointLiteral:

  • 数字。Digits 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();
于 2011-11-27T13:47:14.323 に答える
4

一部のEU諸国が使用しているように、「、」を使用する場合。ローカリゼーションには注意が必要です。

javaapihttp://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にデプロイできる場合は、別のホスティング会社に変更することを強くお勧めします。

于 2011-11-27T13:50:13.280 に答える
3

「。」通常、カンマ区切り文字として使用されます。「」を使用したい場合は、ローカリゼーション設定を変更する必要があります。

 Locale.setDefault(Locale.GERMAN);   //German will do the trick, better to use your country code

または、「NumberFormat」クラスを利用します。このスタックオーバーフロースレッドで非常によく説明されています

于 2011-11-27T13:49:04.037 に答える