アンドロイドフォンでは、この方法はうまく機能します。任意の2桁の数値を取り、ドットの後に小数点以下2桁に変更します。しかし、ギャラクシータブでは、数は0.00ではなく0,00に変わります。したがって、Stringからdoubleに変換すると、例外が発生します。なぜそのように振る舞うのですか?
2 に答える
2
タブレットの地域性のため、タブレットに地域性が設定されているため、数値区切り文字はですが,
、他の地域(たとえば携帯電話)ではです.
。
次のコードを使用して、地域を変更できます。
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Local.GERMAN);
otherSymbols.setDecimalSeparator(',');
otherSymbols.setGroupingSeparator('.');
DecimalFormat df = new DecimalFormat(formatString, otherSymbols);
現在のローカルは、で見つけることができるを使用して取得するLocale.LOCALITY
ことができますjava.util.Local
必要に応じて、回避策を以下に示します。これは、関連する回答(ここに置いたものを含む)を含む
非常に良い質問です。
于 2012-04-24T06:27:38.477 に答える
0
ロケールとDecimalFormatクラス、およびそれらすべてのセパレーターを試してみましたが、問題は解決しませんでした。解析できなかった誤った結果が返されました。そこで、ハッキングして、Math.round(float)
100 * d(入力)を含むfloatを指定して使用したので、ラウンド後、それらの100で除算し、区切り文字の後に小数点以下2桁を取得します。
public static float roundTwoDecimals(double d) {
float rez = (float) (d * 100); //multiply for round
rez = Math.round(rez);
int rezInt = (int) rez;
rez = rezInt; //convert to int to remove unwanted tail
rez = rez / 100; //get back to two decimals float
return rez;
}
これは最善のアイデアではないと思いますが、実際には機能します
于 2012-04-24T15:07:53.253 に答える