在Java中格式化Bigdecimal

时间:2017-02-08 10:04:57

标签: java format bigdecimal

我想根据以下规则格式化BigDecimal值:

25 => 25
25,1 => 25,10
25,10 => 25,10
25,12 = > 25,12

我搜索了论坛,但未找到匹配的问题(hereherehere),我查看了BigDecimal和{{3}的javadoc不知道如何做到这一点。

编辑: 今天我做了:

NumberFormat currencyFormat02 = NumberFormat.getCurrencyInstance(locale);
currencyFormat02.setMinimumFractionDigits(0);
currencyFormat02.setMaximumFractionDigits(2);
currencyFormat02.setGroupingUsed(false);
BigDecimal bd = new BigDecimal("25 or 25,1 or 25,10 or 25,12");
String x =currencyFormat02.format(bd);

x应按上述方式打印,但不能打印。

3 个答案:

答案 0 :(得分:1)

然后,您需要区分代表“整数”的BigDecimal值;而那些没有。

类似的东西:

BigDecimal someNumber = ...
if (someNumber.toBigIntegerExact()) {
 // go for the 25 kind of formatting
} else {
 // go for the 25.xx kind of formatting

“25.xx”格式很好地描述了here(或莱昂纳多的另一个答案)

答案 1 :(得分:1)

可能效率不高,但你可以尝试这样的事情:

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

class Main {
  public static void main(String[] args) {
    BigDecimal ex1 = new BigDecimal("25");
    BigDecimal ex2 = new BigDecimal("25.1");
    BigDecimal ex3 = new BigDecimal("25.10");
    BigDecimal ex4 = new BigDecimal("25.12");
    printCustomBigDecimalFormat(ex1);
    printCustomBigDecimalFormat(ex2);
    printCustomBigDecimalFormat(ex3);
    printCustomBigDecimalFormat(ex4);
  }

  public static void printCustomBigDecimalFormat(BigDecimal bd) {
    DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
    symbols.setDecimalSeparator(',');
    DecimalFormat df = new DecimalFormat("##.00", symbols);
    if(containsDecimalPoint(bd)) {
      System.out.println(df.format(bd));
    } else {
      System.out.println(bd);
    }
  }

  private static boolean containsDecimalPoint(BigDecimal bd) {
    return bd.toString().contains(".");
  }
}

<强>输出:

25
25,10
25,10
25,12

试试here!

答案 2 :(得分:0)

要使用NumberFormat格式化BigDecimal,您需要先设置Locale,尝试这样的事情:

String strToFormat = "25.10";
Locale loc = new Locale("en","US");

DecimalFormat numFormat = (DecimalFormat)NumberFormat.getInstance(loc);
numFormat.setParseBigDecimal(true);
BigDecimal yourValue = (BigDecimal)numFormat.parse(strToFormat, new ParsePosition(0));

System.out.println("Value : " + yourValue);

结果:

Value : 25.10