如何将BigDecimal对象始终舍入为2位小数(即使我的BigDecimal对象没有小数)?
我在做:
myBigDecimal.setScale(2, RoundingMode.HALF_UP); // works fine when it has decimals
上下文:我有一个POJO列表,当我发送到前端时,我在ExtJs中给它们格式
BUT
我也在生成一个CSV文件,并且我被要求所有经济字段都有2位小数。
任何想法或解决方法?
THX
答案 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);