Previous | Next | Trail Map | Internationalization | Formatting

Using Predefined Formats

By invoking the methods provided by the NumberFormat (in the API reference documentation)class, you can format numbers, currencies, and percentages according to Locale. However, there's a catch: NumberFormat may not support the Locale you specify. To find out which Locale definitions are supported by NumberFormat, invoke the getAvailableLocales method:
Locale[] locales = NumberFormat.getAvailableLocales();
If NumberFormat does not support a Locale that you need, you can create your own formats. The next section, Customizing Formats, explains this procedure.

The material that follows shows you how to get locale-specific formats for numbers, currencies, and percentages. The code examples in this material are from a sample program called NumberFormatDemo.java.

Numbers

You can use the NumberFormat factory methods to format primitive type numbers, such as double, and their corresponding wrapper objects, like Double.

The following code example formats a Double according to Locale. Invoking the getNumberInstance method returns a locale-specific instance of NumberFormat. The format method accepts the Double as an argument and returns the formatted number in a String.

Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String amountOut;

numberFormatter = NumberFormat.getNumberInstance(currentLocale);
amountOut = numberFormatter.format(amount);
System.out.println(amountOut + "   " + currentLocale.toString());
The output from this example shows how the format of the same number varies with Locale:
345 987,246   fr_FR
345.987,246   de_DE
345,987.246   en_US

Currencies

If you're writing business applications, chances are you'll need to format and display currencies. You format currencies in the same manner as numbers, except with currencies you call getCurrencyInstance to create a formatter. When you invoke the format method, it returns a String that includes the formatted number and the appropriate currency sign.

The next code example shows how to format currency in a locale-specific manner:

Double currency = new Double(9876543.21);
NumberFormat currencyFormatter;
String currencyOut;

currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale);
currencyOut = currencyFormatter.format(currency);
System.out.println(currencyOut + "   " + currentLocale.toString());
The output generated by the preceding lines of code is as follows:
9 876 543,21 F   fr_FR
9.876.543,21 DM   de_DE
$9,876,543.21   en_US
At first glance this output may look wrong to you, because the numeric values are all the same. Of course, 9 876 543,21 F is not equivalent to 9.876.543,21 DM. However, bear in mind that the NumberFormat class is unaware of exchange rates. The methods belonging to the NumberFormat class format currencies, but do not convert them.

Percentages

You can also use the methods of the NumberFormat class to format percentages. To get the locale-specific formatter, invoke the getPercentInstance method. With this formatter, a fraction like 0.75 is displayed as 75%.

The following code sample shows how to format a percentage.

Double percent = new Double(0.75);
NumberFormat percentFormatter;
String percentOut;

percentFormatter = NumberFormat.getPercentInstance(currentLocale);
percentOut = percentFormatter.format(percent);


Previous | Next | Trail Map | Internationalization | Formatting