我正在使用BigDecimal来计算一些大的实数。虽然我尝试了两种方法:
BigDecimal.toString()
或BigDecimal.stripTrailingZeros().toString()
,它仍然不符合我的要求。
例如,如果我使用stripTrailingZeros
:4.3000
变为4.3
,但4.0
变为4.0
而不是4
。上述两种方法都无法满足这些条件。所以,我的问题是:如何在java中完成它?
谢谢:)
答案 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文档。