How can I use NumberFormat
to format a double
value for a given Locale
(default locale is sufficient) and for a given number of decimal places?
For example, I have these values:
double d1 = 123456.78;
double d2 = 567890;
And I want to print them in the following way, for example with US locale and 2 decimal places:
123,456.78
567,890.00
I don't actually care about rounding mode in this case, because these double values are gained from a BigDecimal
with the given scale, so their number of decimal places is always lesser or equal than the number of decimal places I want to print.
Edit:
To make things a bit more clear, the thing is that I want to display money in a locale dependent way, but with a fixed number of decimal places. The example above showed, how the values should be formatted if the system locale is en_US
. Now lets say, the system locale is cs_CZ
(Czech), so the same numbers should be formatted in this way:
123 456,78
567 890,00
Now, how can I set up a NumberFormat to always display 2 decimal places, but to display thousands separator and decimal point based on the current locale?
Just use %. 2f as the format specifier. This will make the Java printf format a double to two decimal places.
double is a 64-bit IEEE 754 double precision Floating Point Number – 1 bit for the sign, 11 bits for the exponent, and 52* bits for the value. double has 15 decimal digits of precision.
We use the %. 2f format specifier to display values rounded to 2 decimal places.
If you care to read NumberFormat's documentation, the solution would be obvious:
double d1 = 123456.78;
double d2 = 567890;
// self commenting issue, the code is easier to understand
Locale fmtLocale = Locale.getDefault(Category.FORMAT);
NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
System.out.println(formatter.format(d1));
System.out.println(formatter.format(d2));
System.out.println(fmtLocale.toLanguageTag());
On my machine this prints out:
123 456,78
567 890,00
pl-PL
I believe this is what you are looking for, and you don't have to mess-up with patterns. I wouldn't do that - for instance there are locales which group digits by two, not by three (this is the reason we talk about grouping separator and not thousands separator).
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