2012-03-28 3 views
0

1,123.12と1.123,12〜1123.12の両方を解析できる関数が必要です 私が使用する数値のソースは3つありますが、常に1が入ります米国のフォーマットでは、1は常にPT_BR(1.123,12)になり、3番目はデバイスのロケールに応じて任意のフォーマットになる可能性があります。Android - 文字列を小数点記号としてカンマまたはポイントの両方で解析する方法

編集:番号の形式がわからないため、これらの形式を受け取り、正しく解析できる関数が必要です。たぶん私が必要とするのは、数値を表す文字列がどの形式であるかをテストする方法です。 "1.123,12"を受け取って "PT_BR"と言って、1,123.12を受け取って "US"と言うもの。しかし、私はどのようにこのような何かを作るためにどのようにこれを行うにはわからない任意の場所のための鍋。

+0

多分numberformatが助けます! http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html – dm03514

+0

数値を取得している形式がわからないため、numberformatは役に立ちません。 – user1003997

+0

私は使用しています: NumberFormat nf = NumberFormat.getInstance(); nf.parse(string); – user1003997

答えて

0

あなただけの環境のロケールを取得することができます。文字列のコンテキストにロケールのようなものは存在しません。それはまったく逆です。文字列の意味はロケールによって異なります。文字列で表される数(あなたが投稿したものなど)を推測できるケースがありますが、たとえば123,456はどうですか?あいまいなので、ライブラリはこの作業を行うことができません。明らかにいくつかの制約を課した場合(例えば数字に2桁の10進数がなければならない)、あなたは簡単に独自のパーサを書くことができますが、そのような慣習がなければ単純に不可能になります。

+0

あなたの答えを読む直前に私はその結論に達していました。私はそれがソースから来るようにすべての数をフォーマットしなければなりません、その時点で私はそれがどのフォーマットであるかを知っています。それは長い一日になるだろう! – user1003997

1

米国:

NumberFormat nf = NumberFormat.getInstance(Locale.US); 
Number number = nf.parse("1,123.12"); 

ポルトガル語(ブラジル):

NumberFormat nf = NumberFormat.getInstance(Locale.forLanguageTag("pt-BR")); 
Number number = nf.parse("1.123,12"); 

デフォルトロケール:

NumberFormat nf = NumberFormat.getInstance(); 
Number number = nf.parse("1123.12"); 
+0

しかし、どこから来ているのか分かりません。米国の機能が1.123,12を受け取った場合、それは機能しません。文字列のロケールが何であるかを知る方法はありますか? – user1003997

+0

@Jack素晴らしい答え、ありがとう! –

関連する問題