Java BigDecimal:如何格式化BigDecimal

时间:2013-05-21 04:04:28

标签: java bigdecimal

我正在使用BigDecimal来计算一些大的实数。虽然我尝试了两种方法: BigDecimal.toString()BigDecimal.stripTrailingZeros().toString(),它仍然不符合我的要求。

例如,如果我使用stripTrailingZeros4.3000变为4.3,但4.0变为4.0而不是4。上述两种方法都无法满足这些条件。所以,我的问题是:如何在java中完成它?

谢谢:)

2 个答案:

答案 0 :(得分:3)

您可以按如下方式使用DecimalFormat

BigDecimal a = new BigDecimal("4.3000");
BigDecimal b = new BigDecimal("4.0");

DecimalFormat f = new DecimalFormat("#.#");
f.setDecimalSeparatorAlwaysShown(false)
f.setMaximumFractionDigits(340);

System.out.println(f.format(a));
System.out.println(f.format(b));

打印

4.3
4

正如Bhashit所指出的,小数位的默认数量是3,但我们可以将其设置为最大值340.我实际上并不知道DecimalFormat的这种行为。这意味着如果您需要超过340个小数位数,您可能必须自己操纵string给出的toString()

答案 1 :(得分:3)

查看DecimalFormat课程。我认为你想要的是像

DecimalFormat df = new DecimalFormat();
// By default, there will a locale specific thousands grouping. 
// Remove the statement if you want thousands grouping.
// That is, for a number 12345, it is printed as 12,345 on my machine 
// if I remove the following line.
df.setGroupingUsed(false);
// default is 3. Set whatever you think is good enough for you. 340 is max possible.
df.setMaximumFractionDigits(340);
df.setDecimalSeparatorAlwaysShown(false);
BigDecimal bd = new BigDecimal("1234.5678900000");
System.out.println(df.format(bd));
bd = new BigDecimal("1234.00");
System.out.println(df.format(bd));

Output:
1234.56789
1234

您也可以使用自己选择的RoundingMode。使用提供给DecimalFormat构造函数的模式控制要显示的小数点数。有关更多格式详细信息,请参阅DecimalFormat文档。