When following code is executed:
DecimalFormat eNotation1 = new DecimalFormat("#0.###E0");
System.out.println(eNotation1.format(123.456789));
My expected output is;
1.235E2
instead,
1.2346E2
was printed.
Why was the output 1.2346E2
?
I know I could have used a method like setMaximumFractionDigits()
if all I wanted was to set the maximum number of digits after the decimal point, but I just really want to understand why the output was 1.2346E2
If you want that exact format, then use the pattern 0.000E0
:
DecimalFormat eNotation1 = new DecimalFormat("0.000E0");
System.out.println(eNotation1.format(123.456789));
1.235E2
As to why you are seeing your current behavior, the #
placeholders are optional digits, which means that DecimalFormat
is not obligated to actually use them exactly as you used them in the pattern. The only requirement appears to be that the total number of digits appearing in the scientific notation output matches. In this case, the total number of digits is five, so we get the output 1.2346E2
.