16

特定の(デフォルトのロケールで十分です)および特定の小数点以下の桁数の値NumberFormatをフォーマットするにはどうすればよいですか?doubleLocale

たとえば、次の値があります。

double d1 = 123456.78;
double d2 = 567890;

そして、次のように印刷したいと思います。たとえば、米国のロケールと小数点以下2桁を使用します。

123,456.78
567,890.00

この場合、実際には丸めモードは気にしません。これらのdouble値はBigDecimal、指定されたスケールでaから取得されるため、小数点以下の桁数は、印刷する小数点以下の桁数よりも常に少ないか等しいためです。

編集:

もう少し明確にするために、ロケールに依存する方法でお金を表示したいのですが、小数点以下の桁数は固定されています。上記の例は、システムロケールが。の場合に値をフォーマットする方法を示していますen_US。ここで、システムロケールはcs_CZ(チェコ語)であるため、同じ数値を次のようにフォーマットする必要があります。

123 456,78
567 890,00

さて、NumberFormatを設定して、常に小数点以下2桁を表示し、現在のロケールに基づいて千単位の区切り文字と小数点を表示するにはどうすればよいですか?

4

5 に答える 5

45

NumberFormatのドキュメントを読みたい場合、解決策は明らかです。

double d1 = 123456.78;
double d2 = 567890;
// self commenting issue, the code is easier to understand
Locale fmtLocale = Locale.getDefault(Category.FORMAT);
NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
System.out.println(formatter.format(d1));
System.out.println(formatter.format(d2));
System.out.println(fmtLocale.toLanguageTag());

私のマシンでは、これは次のように出力されます。

123 456,78
567 890,00
pl-PL

これがあなたが探しているものだと私は信じています、そしてあなたはパターンを台無しにする必要はありません。私はそうしません-たとえば、数字を3つではなく2つでグループ化するロケールがあります(これが、千単位の区切り文字ではなく、グループ化の区切り文字について説明する理由です)。

于 2012-05-02T14:53:44.260 に答える
9

フォーマットのカスタマイズから適応、

  public void localizedFormat(double value,Locale loc ) {

  NumberFormat nf = NumberFormat.getNumberInstance(loc);
  DecimalFormat df = (DecimalFormat)nf;
  df.applyPattern("###,###.00");
  String output = df.format(value);

  }

この関数は、必要なフォーマットを提供するはずです。

于 2012-05-02T10:12:47.360 に答える
1

あなたは次のようなものを使うことができます

DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance();
formatter.applyPattern("#,###,##0.00");
formatter.format(yourDoubleHere)
于 2012-05-02T09:55:57.897 に答える
0

かなり古い質問ですが、他の回答と同様に、簡単な解決策を得るためにこれを書きました

public static String formatDecimal(Double decimal) {
        return new DecimalFormat(
                "###,###,###,###.##",
                DecimalFormatSymbols.getInstance(Locale.getDefault())
        )
                .format(decimal);
    }
于 2021-12-27T22:32:17.077 に答える
-1

double値を小数点以下の任意の桁数のdouble値に変換します。このメソッドをUtilityクラスに作成して、プロジェクト全体でアクセスできるようにしました。

public static double convertToDecimal(double doubleValue, int numOfDecimals)  {
        BigDecimal bd = new BigDecimal(doubleValue);
        bd = bd.setScale(numOfDecimals, BigDecimal.ROUND_HALF_UP);
        return bd.doubleValue();
    }
于 2016-12-10T06:53:29.310 に答える