将BigDecimal格式化为字符串,最多2位十进制数,在小数部分删除0

res*_*es1 73 java formatting bigdecimal

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

bd = bd.setScale(2, BigDecimal.ROUND_DOWN)
Run Code Online (Sandbox Code Playgroud)

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

1.00 - > 1

1.50 - > 1.5

1.99 - > 1.99

我尝试使用Formatter,formatter.format,但我总是得到2位小数.

我怎样才能做到这一点?也许从bd.toPlainString()处理字符串?

res*_*es1 93

我使用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);
Run Code Online (Sandbox Code Playgroud)

  • 十进制格式是伪装的NumberFormat.使用`NumberFormat numberFormat = NumberFormat.getPercentInstance();`然后`numberFormat.setMinimumFractionDigits(2);`然后`String percent = numberFormat.format(yourBigDecimal);` (4认同)
  • Java 9 及更高版本“BigDecimal.ROUND_DOWN”已弃用。请改用“RoundingMode.DOWN”。 (2认同)

小智 62

new DecimalFormat("#0.##").format(bd)
Run Code Online (Sandbox Code Playgroud)

  • 我使用`new DecimalFormat("0.00")`如果我想确保始终显示两个小数位,例如`1000.5`将显示为"1000.50". (40认同)
  • @ChrisParton 的解决方案工作完美,此外,如果有人需要应用本地化,我们可以使用以下逻辑。`导入java.math.BigDecimal; 导入java.text.*;公共类 LocalizeExample { 公共静态 void main(String[] args) { BigDecimal bd = new BigDecimal("123.10"); } DecimalFormat DecimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(Locale.GERMAN); DecimalFormat.applyPattern("#0.00"); 字符串结果=decimalFormat.format(bd); System.out.println(结果); } }` (2认同)

lrA*_*oid 12

使用stripTrailingZeros().

这个文章应该帮助你.


Par*_*uti 11

以下代码可能对您有所帮助.

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);
}
Run Code Online (Sandbox Code Playgroud)