文字列として取得した数値をDoubleに変換したいのですが、これらの数値は米国の標準ロケールではなく、別のロケールにあります。どうやってやるの?
_Java.text.NumberFormat
_ を試してください。 Javadocsから:
異なるロケールの数値をフォーマットするには、getInstanceの呼び出しでそれを指定します。
_NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
_NumberFormatを使用して数値を解析することもできます。
_myNumber = nf.parse(myString);
_
parse()
は Number
を返します;したがって、double
を取得するには、 myNumber.doubleValue()
を呼び出す必要があります。
_ double myNumber = nf.parse(myString).doubleValue();
_
parse()
がnull
を返すことはないため、これによってNullPointerException
が発生することはありません。代わりに、parse
は、失敗した場合、チェックされたParseException
をスローします。
編集:最初に、double
に変換する別の方法があると言いました:結果をDouble
にキャストし、ボックス化解除を使用します。 NumberFormat
の汎用インスタンスが使用されていたため(Javadocの getInstance
について)、常にDouble
が返されると思いました。しかし DJClayworth は、 parse(String, ParsePosition)
(parse(String)
によって呼び出される)のJavadocが、可能であればLong
が返されることを指摘している。したがって、Double
への結果のキャストは安全ではなく、試してはいけません!
ありがとう、DJClayworth!
NumberFormatを使用する方法ですが、データが100%未満の場合に発生する特殊性に注意する必要があります。
私は次の便利なものを見つけました:
http://www.ibm.com/developerworks/Java/library/j-numberformat/index.html
入力が信頼できる場合は、心配する必要はありません。
NumberFormat
。 ここ は一例ですが、私は正しいと思います。
Javaとプログラミングを学習しています。同様の質問がありました。私の教科書で次のようなものを見つけました:
Scanner sc = new Scanner(string);
double number = sc.nextDouble();
この本によると、スキャナーは文字列変数の内容を自動的にデコードし、スキャナークラスは設定されたLocaleの言語に自動的に適応します。システムLocaleがデフォルトですが、他のものに設定するのは簡単です。
私はこの方法で問題を解決しました。たぶん、これは解析の代わりに上記の問題でうまくいくでしょうか?
追加:このメソッドが好きだった理由は、入力にスイングダイアログボックスを使用していて、解析で文字列をdoubleに変換しようとすると、NumberFormatExceptionが発生したという事実でした。 Scannerはすべての形式を処理できますが、解析では専らUS番号形式を使用していることがわかりました。スキャナーは、コンマ(、)小数点区切り文字を使用しても、入力を問題なく処理しました。最も投票された回答はparseを使用しているため、この特定の問題をどのように解決するかはわかりません。数値をUS形式で入力してから、ロケール形式に変換する必要があります。これは、数値キーボードにカンマが付けられている場合にはかなり不便です。
今、あなたは私をバラバラに細断するのは自由です;)
これは、Java.text.DecimalFormatを使用しても問題ありません。
NumberFormat.getNumberInstance(Locale)を使用します
それがどのロケールか知っていますか?その後、使用できます
DecimalFormat format = DecimalFormat.getInstance(theLocale);
format.parse(yourString);
これは、科学的表記、パーセント記号付きの文字列、または通貨記号付きの文字列でも機能します。