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

2022-09-03 13:38:19

执行以下代码时:

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

我的预期输出是;

1.235E2

相反

1.2346E2

已打印。

为什么输出为1.2346E2

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


答案 1

如果你想要确切的格式,那么请使用模式:0.000E0

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

1.235E2

至于你为什么看到你当前的行为,占位符是可选的数字,这意味着没有义务像你在模式中使用的那样实际使用它们。唯一的要求似乎是科学记数法输出中出现的总数匹配。在这种情况下,总位数为五,因此我们得到输出 。#DecimalFormat1.2346E2


答案 2

为了更好地适应你的第一个模式,我会删除第一个#。像这样,您适合国际单位制,同时在点后保留可选数字。

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

推荐