1

アンドロイドフォンでは、この方法はうまく機能します。任意の2桁の数値を取り、ドットの後に小数点以下2桁に変更します。しかし、ギャラクシータブでは、数は0.00ではなく0,00に変わります。したがって、Stringからdoubleに変換すると、例外が発生します。なぜそのように振る舞うのですか? スクリーンショット

4

2 に答える 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 に答える