почему вывод в экспоненциальном представлении?

Почему вывод следующего кода в экспоненциальном представлении?

      BigDecimal val = new BigDecimal("0000.000000111");
      System.out.println(val);

вывод: 1.11e-8

но вывод этого кода правильный в десятичном формате.

      BigDecimal val = new BigDecimal("0000.000011111");
      System.out.println(val);

вывод: 0,000011111

Есть ли способ получить правильное десятичное значение для первой строки (например, второго вывода)?


person coming out of void    schedule 20.05.2015    source источник
comment
Вы читали документацию для BigDecimal.toString?   -  person Jon Skeet    schedule 20.05.2015
comment
Используйте toPlainString(), чтобы увидеть представление BigDecimal без экспоненты   -  person MaxZoom    schedule 20.05.2015


Ответы (2)


Если вы посмотрите на функцию toString() BigDecimal, он объясняет, как создается вывод:

Затем вычисляется скорректированный показатель степени; это инвертированный масштаб плюс количество символов в преобразованном немасштабированном значении минус один. То есть -scale+(ulength-1), где ulength — длина абсолютного значения немасштабированного значения в десятичных разрядах (его точность).

Если масштаб больше или равен нулю, а скорректированный показатель степени больше или равен -6, число будет преобразовано в символьную форму без использования экспоненциальной записи. В этом случае, если шкала равна нулю, то десятичная точка не добавляется, а если шкала положительна, десятичная точка будет вставлена ​​со шкалой, указывающей количество символов справа от десятичной точки.

Если вы хотите получить вывод без нотации e10, используйте toPlainString().

person serv-inc    schedule 20.05.2015

использовать метод toPlainString

BigDecimal val = new BigDecimal("0000.000011111");
          System.out.println(val.toPlainString());
person miracle_the_V    schedule 20.05.2015