2016-04-09 7 views
0

GWTのNumberFormatを使用して数値をフォーマットして解析しようとしていますが、ユーザーの選択したロケールに関係なくデフォルトのフォーマット(ENロケールのものなど)ユーザーは任意の言語を選択できますが、デフォルトの形式(例:1,234.89)を使用して数値を表示および解析する必要があります。GWT - 選択されたロケールに関係なくデフォルトのロケールで数字を整形する

これを行う方法はありますか?

編集:

例:このコードは唯一の私はNumberFormatExceptionが

NumberFormat format = NumberFormat.getFormat("#,##0.00"); 
String n = "1,234.89"; 
double value = format.parse(n); 
//do something with value... 

を得るRUで、ENロケールで働く私は、ロケールENのためのNumberFormatのインスタンスを取得する必要があるだろうが、私はこれを行うことができますのjavadocのいずれかの方法/コンストラクタを見つけることができません。

+0

どのように現在の書式設定を行っているか、既に試した内容を示してください。 –

答えて

0

私はあなたの持っているあなたがいないNumberFormat.parseNumberFormat.format、使用すべき数:

NumberFormat format = NumberFormat.getFormat("#,##0.00"); 
Double n = 1234.89; 
RootPanel.get().add(new HTML("Number: " + format.format(n))); 

は、私はあなたがすでに多数のフォーマットされた文字列表現を持っているが、あなたはNumberFormat必要はありません。

String n = "1,234.89"; 
RootPanel.get().add(new HTML("Number: " + n)); 
+0

これは単なる例であり、私はそれを操作するために数値の倍の値が必要です。私は自分の投稿を編集しました。 –

+0

私は 'NumberFormat'コードを掘り出しただけで、' NumberFormat'構造で 'NumberConstants'を設定することで、あなたが望むものを得ることができます。それ以外はできません。 'NumberFormat'コンストラクタは保護されているので、作成後に固定された' NumberConstants'を指定する方法はありません( 'setForcedLatinDigits'はあなたにとっては役に立たない)。だからあなたが大げさなハッキングをしたくない場合は、あなたが望むことを行うために 'NumberFormat'を使うことはできないと言います。たぶん私は間違っているかもしれない、他の人が道を見るかもしれない... – grebesche

0

NumberFormatは、常にローカライズされたテキストを解析します。 NumberConstantsの魔法使いを使用して、現在のロケールに応じた遅延バインディングによってインスタンス化されます。残念ながら、他のものを強制的に使用することはできません。NumberConstants

しかし、デフォルトのグループ分け(,)と小数点区切り(.)が分かります。現在のロケールのグループ化と小数点の区切り記号を取得することもできます。したがって、解析する前に置換するだけで済みます。

String n = "1,234.89"; 
n = n.replace(",", LocaleInfo.getCurrentLocale().getNumberConstants().groupingSeparator()); 
n = n.replace(".", LocaleInfo.getCurrentLocale().getNumberConstants().decimalSeparator()); 
double value = format.parse(n); 

これはどのロケールでも有効です。

デフォルトのロケールで数値をフォーマットするには、現在のロケールでフォーマットした後に、その逆の置換を行います。

関連する問題