2

パーセンテージを適切な長さに丸めるために、アプリに次のコード行があります。

double percentage = ((double)correct*100)/((double)total);
DecimalFormat df = new DecimalFormat("#.0");
percentage = Double.valueOf(df.format(percentage));

このコードは 99% の確率で正常に動作しますが、一部のヨーロッパの国の人々がこれを使用するとクラッシュし、NumberFormatException.

これは、DecimalFormatが double56.7777を丸めるときに56,8(コンマで) に丸めるためです。つまり、double に変換しようとすると、 NumberFormatException がスローされます。

ローカリティを に設定して、DecimalFormat常に に丸められるようにする方法は56.8あり56,8ますか?

4

5 に答える 5

2

同じ数値形式を使用してデータを解析する

percentage = df.parse(df.format(percentage), new ParsePosition(0))

他の解決策は、独自の書式記号を設定することです

DecimalFormat df = new DecimalFormat('#.0', new DecimalFormatSymbols())

最初の解決策をお勧めします。コンマを小数点として使用するロケールでテストしました。

于 2013-08-22T20:54:48.453 に答える
1
    NumberFormat numberFormat = NumberFormat.getNumberInstance(context.getResources().getConfiguration().locale); // Locale.getDefaultLocale()
    DecimalFormat  decimalFormat = (DecimalFormat)numberFormat;
    char separator =decimalFormat.getDecimalFormatSymbols().getDecimalSeparator();
    decimalFormat.applyPattern("#".concat(Character.toString(separator)).concat("0"));"

に基づいて小数点記号を取得する必要がありますLocale

于 2013-08-22T20:51:51.797 に答える
0

小数を文字列に変換し、これをそれに適用します

str = str.replaceAll(",","."); // or "\\.", it doesn't matter...

それはすべて,に変わります.

于 2013-08-22T20:57:06.617 に答える
0

テスト値の通貨を設定し、書式を設定して、コンマまたは があるかどうかを確認できます。の場合は適切に処理します。

DecimalFormat test = new DecimalFormat("0.00"); test.setCurrency(c);

文字列 testsample = test.format(1.23); char ch = sample.indexOf(".") > 0 ? 「。」: ",";

于 2013-08-22T20:53:48.683 に答える