Как всегда отображать объект BigDecimal в полном десятичном формате вместо научной записи? - PullRequest
5 голосов
/ 20 июля 2010

У меня есть BigDecimal объект, myNumber, с неизвестной длиной.Например: 12345678.

Я всегда хочу разделить это число на 1 миллион, поэтому я делаю:

myNumber.divide(BigDecimal.valueOf(1000000))

Я получаю 12.345678.

Я хочу отобразить это как строку "12.345678 ", не обрезая ЛЮБЫХ десятичных знаков.

Так что я делаю

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

Это прекрасно работает с приведенным выше примером.Но если myNumber - это что-то смехотворно маленькое или большое, например:

0.00000001

После деления 0.00000001 на миллион и преобразования в строку, это отображается как научная запись, что не то, что я хочу.Я хочу, чтобы он всегда отображался в полном десятичном формате (в данном случае 0.00000000000001).

Есть идеи?

Ответы [ 4 ]

3 голосов
/ 20 июля 2010

Вы должны выполнить деление, используя вариант divide(), который включает в себя режим округления и шкалу, и установить шкалу достаточно большую, чтобы включить все дробные цифры.

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

Затем используйте toPlainString() для форматирования.

2 голосов
/ 20 июля 2010

Я думаю, что BigDecimal.toPlainString () - это метод, который вам нужен. Однако обратите внимание, что само деление вызовет исключение, когда десятичное представление бесконечно, например, с 1/3.

1 голос
/ 21 октября 2013

BigDecimal.toString или toPlainString помогут.

0 голосов
/ 20 июля 2010

Вы можете использовать BigDecimal.toPlainString(), чтобы вернуть «строковое представление этого BigDecimal без поля экспоненты».

Научная запись с другой стороны возвращается BigDecimal.toEngineeringString().

...