大十进制舍入到两位小数总是(即使我的BigDecimal对象没有小数)?

时间:2013-12-12 17:52:43

标签: java rounding bigdecimal

如何将BigDecimal对象始终舍入为2位小数(即使我的BigDecimal对象没有小数)?

我在做:

myBigDecimal.setScale(2, RoundingMode.HALF_UP); // works fine when it has decimals

上下文:我有一个POJO列表,当我发送到前端时,我在ExtJs中给它们格式

BUT

我也在生成一个CSV文件,并且我被要求所有经济字段都有2位小数。

任何想法或解决方法?

THX

2 个答案:

答案 0 :(得分:6)

您可以使用java.text.DecimalFormat类格式化十进制数字。 e.g。

<强>代码

public static void main(String[] args) {
    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setDecimalSeparator('.');
    DecimalFormat formatter = new DecimalFormat("#.00", symbols);
    System.out.println(formatter.format(BigDecimal.valueOf(12.456)));
    System.out.println(formatter.format(BigDecimal.valueOf(12L)));
}

<强>输出

12.46
12.00

Customizing Formats (The Java Tutorials > Internationalization > Formatting)中查看更多内容。

答案 1 :(得分:2)

  

我正在生成CSV文件

这意味着您处理舍入 - 而是处理格式化。换句话说,在实际数字的小数点后面有多少位数并不重要:你想要的只是在正在生成的文本文件中放置正确的位数。

  

我被要求所有经济领域都有2位小数。

这样做的一种方法是使用printf的格式化功能:

BigDecimal bd = BigDecimal.valueOf(12.5);
System.out.printf("%.2f", bd);

demo.