代码之家  ›  专栏  ›  技术社区  ›  Roman

如何打印格式化的BigDecimal值?

  •  84
  • Roman  · 技术社区  · 14 年前

    我有一个 BigDecimal 领域 amount 它代表钱,我需要在浏览器中以如下格式打印它的值 $123.00 , $15.50 , $0.33

    我该怎么做?

    (我认为唯一简单的解决办法就是 floatValue 大十进制 然后使用 NumberFormat 使分数部分精确到两位数)。

    5 回复  |  直到 8 年前
        1
  •  144
  •   Basil Bourque    5 年前
    public static String currencyFormat(BigDecimal n) {
        return NumberFormat.getCurrencyInstance().format(n);
    }
    

    它将使用JVMs当前的默认值 Locale 选择货币符号。或者您可以指定 区域设置 .

    NumberFormat.getInstance(Locale.US)
    

    NumberFormat

        2
  •  74
  •   ZeroOne    7 年前

    设置千位分隔符,例如 123,456.78 DecimalFormat :

         DecimalFormat df = new DecimalFormat("#,###.00");
         System.out.println(df.format(new BigDecimal(123456.75)));
         System.out.println(df.format(new BigDecimal(123456.00)));
         System.out.println(df.format(new BigDecimal(123456123456.78)));
    

    结果如下:

    123,456.75
    123,456.00
    123,456,123,456.78
    

    #,###.00 掩码,它也成功地格式化了较长的值。 请注意,结果中的逗号(,)分隔符取决于您的区域设置。它可能只是俄罗斯地区的空格()。

        3
  •  38
  •   demongolem    11 年前

    BigDecimal newBD = oldBD.setScale(2);
    

    我这么说是因为 在某些情况下 说到钱,超过小数点后两位是没有意义的。再进一步,这可能导致

    String displayString = oldBD.setScale(2).toPlainString();
    

        4
  •  16
  •   Fluch    7 年前
     BigDecimal pi = new BigDecimal(3.14);
     BigDecimal pi4 = new BigDecimal(12.56);
    
     System.out.printf("%.2f",pi);
    

    //打印3.14

    System.out.printf("%.0f",pi4);
    

    //打印13

        5
  •  8
  •   volkovs    5 年前

    Locale

    DecimalFormatSymbols 对于显式区域设置:

    DecimalFormatSymbols decimalFormatSymbols  = DecimalFormatSymbols.getInstance(new Locale("ru", "RU"));
    

    DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
    decimalFormatSymbols.setDecimalSeparator('.');
    decimalFormatSymbols.setGroupingSeparator(' ');
    

    new DecimalFormat("#,##0.00", decimalFormatSymbols).format(new BigDecimal("12345"));
    

    结果:

    12 345.00
    
        6
  •  1
  •   Dima    8 年前
    BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)
    
        7
  •  0
  •   Nick Wilde    4 年前

    我知道这个问题很老了,但我最近在我的kotlin应用程序中也做了类似的事情。所以这里有一个例子,如果有人需要它:

    val dfs = DecimalFormatSymbols.getInstance(Locale.getDefault())
    val bigD = BigDecimal("1e+30")
    val formattedBigD = DecimalFormat("#,##0.#",dfs).format(bigD)
    

    显示$formattedBigD的结果:

    1,000,000,000,000,000,000,000,000,000,000