Я напечатал значения для минимальных / максимальных целых / дробных цифр в случае "## 0. ## E0" и проверил результаты, заданные @Agemen:
DecimalFormat df = new DecimalFormat( "##0.##E0" );
System.out.printf("getMinimumIntegerDigits=%d\n", df.getMinimumIntegerDigits() );
System.out.printf("getMaximumIntegerDigits=%d\n", df.getMaximumIntegerDigits() );
System.out.printf("getMinimumFractionDigits=%d\n", df.getMinimumFractionDigits() );
System.out.printf("getMaximumFractionDigits=%d\n", df.getMaximumFractionDigits() );
double v = 12345;
System.out.printf("s=%f\n", v );
System.out.printf("r=%s\n", df.format(v) );
с помощьюрезультат:
getMinimumIntegerDigits=1
getMaximumIntegerDigits=3
getMinimumFractionDigits=0
getMaximumFractionDigits=2
s=12345.000000
r=12.345E3
На мой взгляд, это ошибка в реализации Java или в документации, ожидаемый результат не получен.
О примере, приведенном вответ @JoopEggen неприменим, потому что в шаблоне "##0.#####E0"
максимальное количество дробных цифр равно 5.
Фактически ожидаемая строка получается с использованием шаблона "##0.E0"
.
Ошибка, вероятно, в файле DecimalFormat.java, в операторе:
digitList.set(isNegative, number,
useExponentialNotation ?
maxIntDigits + maxFraDigits : maxFraDigits,
!useExponentialNotation);
Где добавление "maxIntDigits + maxFraDigits" должно быть " minIntDigits + maxFraDigits", чтобы согласиться с Javaдокументация.