我已经在“##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。
实际上,预期的字符串是使用 pattern 获得的"##0.E0"
。
错误可能在文件 DecimalFormat.java 中,在语句中:
digitList.set(isNegative, number,
useExponentialNotation ?
maxIntDigits + maxFraDigits : maxFraDigits,
!useExponentialNotation);
添加“maxIntDigits + maxFraDigits”应该是“ minIntDigits + maxFraDigits”以同意 java 文档。