44.1 NumberFormat Basics
NumberFormat provides locale-aware formatting for numbers, currencies, and percentages.
44.1.1 Basic Number Formatting
import java.text.NumberFormat;
import java.util.Locale;
NumberFormat nf = NumberFormat.getInstance(Locale.US);
String s = nf.format(1234567.89); // "1,234,567.89"
NumberFormat nfDE = NumberFormat.getInstance(Locale.GERMANY);
String sDE = nfDE.format(1234567.89); // "1.234.567,89"
44.1.2 Currency Formatting
NumberFormat currency = NumberFormat.getCurrencyInstance(Locale.US);
String usd = currency.format(1234.56); // "$1,234.56"
NumberFormat currencyEU = NumberFormat.getCurrencyInstance(Locale.FRANCE);
String eur = currencyEU.format(1234.56); // "1 234,56 €"
44.1.3 Percent Formatting
NumberFormat percent = NumberFormat.getPercentInstance(Locale.US);
String pct = percent.format(0.1234); // "12%" (default rounds)
percent.setMaximumFractionDigits(2);
String pct2 = percent.format(0.1234); // "12.34%"
44.1.4 Parsing
NumberFormat nf = NumberFormat.getInstance(Locale.US);
try {
Number num = nf.parse("1,234.56");
double d = num.doubleValue(); // 1234.56
} catch (java.text.ParseException e) {
// handle
}
44.1.5 Thread Safety
NumberFormat instances are NOT thread-safe. Use ThreadLocal or create per-thread instances:
ThreadLocal<NumberFormat> formatters = ThreadLocal.withInitial(
() -> NumberFormat.getCurrencyInstance(Locale.US)
);