开发者

How to always display a BigDecimal object in full decimal format instead of scientific notation?

I have a BigDecimal object, myNumber, with unknown length. For example: 12345678.

I always want to divide this number by 1 million, so I do:

myNumber.divide(BigDecimal.valueOf(1000000))

I get 12.345678.

I want to display this as a string "12.345678", without cutting off ANY decimal places.

So I do

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

This works fine with the above example. But if myNumber is something ridiculously small or big, such as:

0.00000001

After dividing 0.00000001 by a million开发者_运维问答 and converting to string, it displays as scientific notation, which is not what I want. I want it to always display in full decimal format (in this case, 0.00000000000001).

Any ideas?


You have to perform the division using the variant of divide() that includes a rounding mode and a scale, and set the scale large enough to include all the fractional digits.

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

Then use toPlainString() to format.


I think that BigDecimal.toPlainString() is the method you need. However, note that the division itself will throw an exception when the decimal representation is infinite, such as with 1/3.


BigDecimal.toString or toPlainString would help.


You can use BigDecimal.toPlainString() to return "a string representation of this BigDecimal without an exponent field".

The scientific notation on the other hand is returned by BigDecimal.toEngineeringString().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜