1

我需要格式化一个小数点后 2 位的数字。原始数字可以是整数,也可以是小数点后三位的数字。然而,无论原始数字是整数还是有小数位,结果都应该格式化为有逗号和两位小数。

  1. 当原始 num = 56565656.342 ==> 我需要 56,565,656.34
  2. 当原始 num = 56565656 ==> 我需要 56,565,656.00
  3. 当原始 num = 56565656.7 ==> 我需要 56,565,656.70

我正在使用以下代码格式化代码,但在上述 2 和 3 种情况下未能添加两位小数。

String originalNumber = "56565656.7";
BigDecimal b = new BigDecimal(originalNumber).setScale(2, BigDecimal.ROUND_HALF_UP);
String formattedNumber = NumberFormat.getInstance().format(b);

请让我知道是否有任何方法可以有效地完成此操作。

提前致谢。

4

3 回答 3

6

看一下DecimalFormat类。

或者,您可以使用 BigDecimal 类的setScale方法。

        BigDecimal bg1 = new BigDecimal("56565656.342");
        BigDecimal bg2 = new BigDecimal("56565656.00");
        BigDecimal bg3 = new BigDecimal("56565656.70");

        DecimalFormat df = new DecimalFormat("###,###.00");
        System.out.println(df.format(bg1.doubleValue()));
        System.out.println(df.format(bg2.doubleValue()));
        System.out.println(df.format(bg3.doubleValue()));

        System.out.println(bg1.setScale(2, BigDecimal.ROUND_HALF_UP));
        System.out.println(bg2.setScale(2, BigDecimal.ROUND_HALF_UP));
        System.out.println(bg3.setScale(2, BigDecimal.ROUND_HALF_UP));

产量:

56,565,656.34
56,565,656.00
56,565,656.70
56565656.34
56565656.00
56565656.70

编辑:还忘了提及:如果您追求精度,我建议您使用该setScale方法,使用该.doubleValue()方法会产生一个double可能导致精度损失的方法。

于 2012-08-08T06:01:00.203 回答
3

只需使用NumberFormat并指定小数位数和舍入方法即可打印:

String [] originalNumbers = new String[] {
   "56565656.342",
   "56565656.7",
   "56565656"
};

NumberFormat df = NumberFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
df.setRoundingMode(RoundingMode.HALF_UP);

for (String number : originalNumbers) {
   String formattedNumber = df.format(new BigDecimal(number));

   System.out.println(formattedNumber);
}

将打印

56,565,656.34
56,565,656.70
56,565,656.00

**编辑**

DecimalFormat df = new DecimalFormat("#,###.00");

将使用上面给定的代码产生完全相同的结果。

于 2012-08-08T06:15:44.053 回答
-2

DecimalFormat 类会为您完成...。您将必须指定适当的格式。

于 2012-08-08T06:09:11.930 回答