我有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
)。
有什么想法吗?
答案 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()
返回。