|
|
Formatting |
By invoking the methods provided by theNumberFormatclass, you can format numbers, currencies, and percentages according to
Locale. However, there's a catch:NumberFormatmay not support theLocaleyou specify. To find out whichLocaledefinitions are supported byNumberFormat, invoke thegetAvailableLocalesmethod:IfLocale[] locales = NumberFormat.getAvailableLocales();NumberFormatdoes not support aLocalethat 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 theNumberFormatfactory methods to format primitive type numbers, such asdouble, and their corresponding wrapper objects, likeDouble.The following code example formats a
Doubleaccording toLocale. Invoking thegetNumberInstancemethod returns a locale-specific instance ofNumberFormat. Theformatmethod accepts theDoubleas an argument and returns the formatted number in aString.The output from this example shows how the format of the same number varies withDouble amount = new Double(345987.246); NumberFormat numberFormatter; String amountOut; numberFormatter = NumberFormat.getNumberInstance(currentLocale); amountOut = numberFormatter.format(amount); System.out.println(amountOut + " " + currentLocale.toString());Locale:345 987,246 fr_FR 345.987,246 de_DE 345,987.246 en_USCurrencies
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 callgetCurrencyInstanceto create a formatter. When you invoke theformatmethod, it returns aStringthat includes the formatted number and the appropriate currency sign.The next code example shows how to format currency in a locale-specific manner:
The output generated by the preceding lines of code is as follows:Double currency = new Double(9876543.21); NumberFormat currencyFormatter; String currencyOut; currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale); currencyOut = currencyFormatter.format(currency); System.out.println(currencyOut + " " + currentLocale.toString());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 the9 876 543,21 F fr_FR 9.876.543,21 DM de_DE $9,876,543.21 en_USNumberFormatclass is unaware of exchange rates. The methods belonging to theNumberFormatclass format currencies, but do not convert them.Percentages
You can also use the methods of theNumberFormatclass to format percentages. To get the locale-specific formatter, invoke thegetPercentInstancemethod. 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);
|
|
Formatting |