Шаблон десятичного формата ## 0.0E0, возвращающий 1.235E3

#java #decimalformat

#java #десятичный формат

Вопрос:

DecimalFormat, похоже, игнорирует шаблон для десятичной части числа.

 DecimalFormat formatter = (DecimalFormat) NumberFormat.getNumberInstance(locale);
formatter.applyPattern("##0.0E");
String text = formatter.format(Double.valueOf(1234.5678));
// text is 1.235E3
  

Почему он не возвращает 1.2E3?

Комментарии:

1. Читая раздел DecimalFormat javadoc о научной нотации, я подозреваю, что это связано с минимальным и максимальным количеством целых цифр и тем, как они влияют на результат? Однако у меня не было возможности заглянуть более глубоко.

2. Когда я читаю документ, в нем говорится, что количество значащих цифр в мантиссе равно минимальным целым цифрам (1) плюс максимальным дробным цифрам (1), поэтому оно должно быть не менее 2 (1.23E3), но я не могу сделать вывод из документации, почему оно становится 3-значным.

3. Вы вводите его в инженерную нотацию. Смотрите Javadoc.

4. @user207421 Есть ли способ убрать это из инженерной нотации? Я пытаюсь эмулировать то, что делает Excel.

Ответ №1:

0.#E0 дал бы вам правильный ответ.