-1

DecimalFormat twoDFormを使用して小数点以下を減らしている間に、浮動小数点数を解析しようとしています。 は、次のように私は、インスタンス化されている小数点以下の桁数を設定するには、次のいくつかのケースでは、一見ロケールに基づいて DecimalFormatは、ユーザーが異なるロケールを持つ場合にラテン数字を強制的に適用します。

Float.valueOf(twoDForm.format(cameraPosition.x) 

をスロー:

twoDForm = new DecimalFormat("#.##"); 

その後、私は、次の呼び出しを行うフロートを解析します

NumberFormatException: Invalid float: "١٥.٨٦" non latin numbers or font 

ロケールとAndroidデバイスが数字と記号を扱う方法の違いにより、NumberFormatExceptionでいくつかの異なる問題が発生しています私は別のコンマの種類、およびマイナス記号を使用して、いくつかの例を伴うものを解決することができました

DecimalFormatSymbols dfs = new DecimalFormatSymbols(); 
dfs.setDecimalSeparator('.'); 
dfs.setMinusSign('-'); 
twoDForm.setDecimalFormatSymbols(dfs); 

が、今、私が直面しています。lsので、私はまたのDecimalFormatに以下を追加しました java.lang.NumberFormatException:無効な浮動小数点: "15.86"

私はGoogleにアラビア語の本の提案をしているので、別の言語の番号を扱う別の方法だと思っています。それを避けるために "普通の"数字を使うように強制する方法はありますか?それは、それぞれの可能な場合に特定のロケールを追加することなく、同じFloat.valueOf(...)を呼び出すことができますか?

ありがとうございます!

+1

例外が発生するテキストはどうしていますか?どのようなコマンドを呼びますか? –

+1

質問に明記されていない場合は、アラビア数字を使用してください。 –

+1

'.'は定期的な期間ですか?おそらく –

答えて

2

文字列の文字は、1,5,8、および6のアラビア数字です。アラビア語を話すロケールが必要です。

次のコードは私には役に立ちますが、必要に応じて15.86を出力します。

Locale saudiArabia = new Locale("ar", "SA"); 
NumberFormat arabicFormat = NumberFormat.getInstance(saudiArabia); 
try { 
    Number parsed = arabicFormat.parse("١٥.٨٦"); 
    System.out.println(parsed); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 
+0

すばらしい、ありがとう!もっと具体的に質問を編集しました。どうぞご覧ください。任意のタイプのロケールを単に説明し、DecimalFormatから文字列を解析する方法はありますか?問題は世界中にユーザーがいることで、どのロケールを使用しているのかわかりません。 – simernes

+0

さて、人が答えると、実質的に質問を変えるべきではありません。回答が無効になります。スタックオーバーフローはあなたのためだけではないことを覚えておいてください。他の人がここにいるこの質問から恩恵を受けるでしょう。しかしそれ以外に、なぜあなたは 'DecimalFormat'を使って数値を' String'に変換し、次に 'Float.valueOf'を使って数値に変換していますか?あなたはそれを数として残して、これらの問題をすべて避けることはできませんか? –

+0

はい、私は質問が削除されなければならないという警告を得ました。なぜなら、それは適切に策定されていなかったからです。私がここに求めているのは、もともと質問したかったものです。私は小数点以下の桁数を制限したいので、それが私が思いついた唯一の解決策でした。 – simernes

関連する問題