1

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

例如,如果我使用stripTrailingZeros:4.3000变为4.34.0变为4.0not 4。以上两种方法都不能满足这些条件。所以,我的问题是:如何在 java 中完成它?

谢谢 :)

4

2 回答 2

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文档。

于 2013-05-21T04:24:29.070 回答
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()

于 2013-05-21T04:15:14.977 回答