使用正确的小数位数格式化数字

时间:2012-08-08 05:58:49

标签: java bigdecimal decimalformat

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

  1. 当原始num = 56565656.342 ==>我需要56,565,656.34
  2. 当原始num = 56565656 ==>我需要56,565,656.00
  3. 当原始num = 56565656.7 ==>我需要56,565,656.70
  4. 我正在使用以下代码来格式化代码但是它无法在上面的2&中添加两个小数位。 3例。

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

    如果有办法以效果方式完成此任务,请告诉我。

    提前致谢。

3 个答案:

答案 0 :(得分:5)

查看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,这会导致丢失精度。

答案 1 :(得分:2)

只需使用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");

使用上面给出的代码生成完全相同的结果。

答案 2 :(得分:-2)

DecimalFormat类会为你做....你必须指定适当的格式。