5

我有一个长度未知的BigDecimal对象。myNumber例如:12345678

我总是想把这个数字除以 100 万,所以我这样做:

myNumber.divide(BigDecimal.valueOf(1000000))

我明白了12.345678.

我想将其显示为字符串“ 12.345678”,而不切断任何小数位。

所以我愿意

myNumber.divide(BigDecimal.valueOf(1000000)).toString()

这适用于上述示例。但是,如果 myNumber 是非常小或非常大的东西,例如:

0.00000001

除以0.00000001一百万并转换为字符串后,它显示为科学计数法,这不是我想要的。我希望它始终以完整的十进制格式显示(在本例中为0.00000000000001)。

有任何想法吗?

4

4 回答 4

3

divide()您必须使用包含舍入模式和比例 的变体执行除法,并将比例设置为足够大以包含所有小数位数。

int s = myNumber.scale();
BigDecimal result = myNumber.divide(BigDecimal.valueOf(1000000), s+6, RoundingMode.UNNECESSARY);

然后使用toPlainString()格式化。

于 2010-07-20T15:58:03.147 回答
2

我认为BigDecimal.toPlainString()是您需要的方法。但是,请注意,当十进制表示为无限时,除法本身会引发异常,例如 1/3。

于 2010-07-20T15:45:00.287 回答
1

BigDecimal.toString 或 toPlainString 会有所帮助。

于 2013-10-21T04:03:18.107 回答
0

您可以使用BigDecimal.toPlainString()返回“BigDecimal没有指数字段的字符串表示形式”。

另一方面,科学记数法由BigDecimal.toEngineeringString().

于 2010-07-20T15:46:22.123 回答