2015-09-11 2 views
0

Я хотел бы использовать toEngineeringString(), но он не работает:BigDecimal toEngineeringString не работает

Log.v("smslms",BigDecimal.valueOf(1_000_0000_000_000_000L).toEngineeringString());` 

выход:

09-11 16:26:12.221 18492-18492/skarwild.game V/smslms﹕ 10000000000000000 
+0

Обратите внимание, что один из ваших «разделов» в номере имеет четыре нуля в, кстати. Вы имели в виду это? –

ответ

3

Это точно ведет себя, как documented:

Возвращает строку который представляет BigDecimal, как описано в методе toString(), за исключением того, что если используется экспоненциальная нотация, мощность десять регулируется, чтобы быть кратно трем (инженерных обозначений) таким образом, что целая часть ненулевых значений будет находиться в диапазоне от 1 до 999.

Теперь toString() указывает:

Стандартный канонической строки форма BigDecimal создается следующим образом: во-первых, абсолютное значение немасштабированного значения BigDecimal преобразуется в строку в базе десять с использованием символов от 0 до 9 без ведущих нулей (кроме if его значение равно нулю, в этом случае используется один символ «0»).

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

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

В нашем случае шкала равна 0, поэтому скорректированный показатель составляет 16 (или что-то в этом роде). Поэтому значение преобразуется в символьную форму без использования экспоненциальной нотации.

Смежные вопросы