83

我有一个 BigDecimal 数字,我只考虑它的 2 个小数位,所以我使用以下方法截断它:

bd = bd.setScale(2, BigDecimal.ROUND_DOWN)

现在我想将它打印为字符串,但如果它是 0,则删除小数部分,例如:

1.00 -> 1

1.50 -> 1.5

1.99 -> 1.99

我尝试使用格式化程序 formatter.format 但我总是得到 2 个十进制数字。

我怎样才能做到这一点?也许正在处理来自 bd.toPlainString() 的字符串?

4

5 回答 5

110

我用于DecimalFormat格式化BigDecimal而不是格式化String,似乎没有问题。

代码是这样的:

bd = bd.setScale(2, BigDecimal.ROUND_DOWN);

DecimalFormat df = new DecimalFormat();
            
df.setMaximumFractionDigits(2);
            
df.setMinimumFractionDigits(0);
            
df.setGroupingUsed(false);

String result = df.format(bd);
于 2012-05-04T23:22:11.080 回答
71
new DecimalFormat("#0.##").format(bd)
于 2013-01-14T18:26:17.427 回答
14

下面的代码可能会对您有所帮助。

protected String getLocalizedBigDecimalValue(BigDecimal input, Locale locale) {
    final NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
    numberFormat.setGroupingUsed(true);
    numberFormat.setMaximumFractionDigits(2);
    numberFormat.setMinimumFractionDigits(2);
    return numberFormat.format(input);
}
于 2015-06-03T05:56:36.037 回答
12

使用stripTrailingZeros().

这篇文章应该对你有所帮助。

于 2012-04-22T15:26:42.517 回答
3

如果它的钱使用:

NumberFormat.getNumberInstance(java.util.Locale.US).format(bd)
于 2016-08-01T23:31:25.193 回答