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
.
In order to fit your first pattern better i would just remove the first #. Like this you fit international unit system while keeping optional numbers after point.
DecimalFormat eNotation1 = new DecimalFormat("0.###E0");
System.out.println(eNotation1.format(123.456789));
Seems like this pattern will work as you expect
DecimalFormat eNotation1 = new DecimalFormat("0.000E0");
Basically, Using 0s for your pattern causes the formatter to use the specific digits in place and convert the remaining to Exponential Notation.
Using #s for the same pattern, makes all remaining digits fit into the number of places specified, before applying exponents, meaning your specific use case will be rounded, then the remaining digits will be added to the Exponent.
Granted the Docs aren't that clear on it: https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html.
"123456.789 ###.## 123456.79 The value has three digits to the right of the decimal point, but the pattern has only two. The format method handles this by rounding up."
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With