如何始终以完整的十进制格式而不是科学记数法显示BigDecimal对象?

时间:2010-07-20 15:32:16

标签: java formatting bigdecimal

我有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 个答案:

答案 0 :(得分:3)

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

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

然后使用toPlainString()进行格式化。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

BigDecimal.toString或toPlainString会有所帮助。

答案 3 :(得分:0)

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

另一方面,科学记数由BigDecimal.toEngineeringString()返回。