为什么在此代码中不遵循模式字符串?

Len*_*via 15 java scientific-notation decimalformat

当执行以下代码时:

DecimalFormat eNotation1 = new DecimalFormat("#0.###E0");   
System.out.println(eNotation1.format(123.456789)); 
Run Code Online (Sandbox Code Playgroud)

我的预期输出是;

1.235E2

代替,

1.2346E2

被印刷了。

为什么输出1.2346E2

我知道我可以使用一种方法,例如setMaximumFractionDigits()是否只想设置小数点后的最大位数,但是我只是想了解为什么输出是1.2346E2

Tim*_*sen 15

如果您想要确切的格式,请使用模式0.000E0

DecimalFormat eNotation1 = new DecimalFormat("0.000E0");
System.out.println(eNotation1.format(123.456789));

1.235E2
Run Code Online (Sandbox Code Playgroud)

至于为什么看到当前行为,#占位符是可选数字,这意味着DecimalFormat没有义务实际使用它们在模式中的使用方式。唯一的要求似乎是科学计数输出中出现的总位数匹配。在这种情况下,总位数为5,所以我们得到输出1.2346E2