にEUの通貨を解析、私は次のように動作するはずのEditText(アンドロイド2.3.3)を持っている:アンドロイド:ナンバー
ユーザーがインスタンス10,40のために入る(EU通貨で10ユーロと40セントであります) - 私はその文字列入力を受け取り、さらに内部的な計算のためにBigDecimal(またはNumber等...)に変換したいと思います。
ユーザーが10.40を入力した場合(米国ドルの場合は10ドルと40セントになります)、文字列入力を取得してBigDecimal(またはNumberなど)に変換します。 ) 例えば。
私は失敗した、(マイケルPetrottaの答えhereに基づいて)次のことを試してみました無駄に10,40€を "「はParseException:解析できません番号10,40)
// German input
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.GERMANY);
// User input
String value = "10,40";
Number valueParsed = formatter.parse(value);
私も試してみました"。だから私はNumberFormat.parseの目的を誤解しているのか、間違ったトラックを一緒にしているのか...?正規表現を使って、バージョンが "10,40"になるのを避けたいのですが、私はロケールをベースにしたきれいなアプローチをしたいと思います。
EDIT
私は同じ問題に対処するthis questionを見つけました - 正解は私と同じアプローチを使用していますので、私は再びフランス語をロケールとして使用しましたが、それでもなお失敗します。引用された質問は私に間違っていると思われる場合、米ドルのような何千もの通貨の分数としてコンマを使用するので、私には悪い考えであるreplaceAll( "、"、 "。")を使って示唆された質問。あなたはその何かをしたい場合は :私は、しかし
+1は正規表現を使いたい! – fge
ありがとうございます - このケースでは正規表現を使用すると本当に苦しいことがありますし、あまりにも多くの通貨があり、したがってユーザー入力の潜在的な方法があるので、特に間違っている可能性があります。それを見つけると思われる:) ... – AgentKnopf
「10,40」と「10.40」を10.4に同じロケールの同じデバイスで処理しますか?あるいは、例えば、ドイツロケールでは「10,40」、米国ロケールでは「10.40」となりますか? – ernazm