Formatting |
You can use theDecimalFormat
class to format decimal numbers into locale-specific strings. This class allows you to control the display of leading and trailing zeros, prefixes and suffixes, grouping (thousands) separators, and the decimal separator. If you want to change formatting symbols such as the decimal separator, you can use theDecimalFormatSymbols
in conjunction with theDecimalFormat
class. These classes offer a great deal of flexibility in the formatting of numbers, but they can make your code more complex. Whenever possible, you should use theNumberFormat
class, which is described in the previous section, instead ofDecimalFormat
andDecimalFormatSymbols
.Using examples, the text that follows shows you how to use the
DecimalFormat
andDecimalFormatSymbols
classes. The code examples in this material are from a sample program called DecimalFormatDemo.java.Constructing Patterns
You specify the formatting properties ofDecimalFormat
with a patternString
. The pattern determines what the formatted number looks like. For a full description of the pattern syntax, seeNumber Format Pattern Syntax
.The example that follows creates a formatter by passing a pattern
String
to theDecimalFormat
constructor. Theformat
method accepts adouble
value as an argument, and returns the formatted number in aString
:The output for the preceding lines of code is described in the following table. TheDecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(value); System.out.println(value + " " + pattern + " " + output);value
is the number, adouble
, that is to be formatted. Thepattern
is theString
that specifies the formatting properties. Theoutput
, which is aString
, represents the formatted number.
value pattern output Explanation 123456.789 ###,###.### 123,456.789 The pound sign (#) denotes a digit,
the comma is a placeholder for the
grouping separator, and the period
is a placeholder for the decimal
separator.123456.789 ###.## 123456.79 The value
has three digits to the right
of the decimal point, but thepattern
has only two. Theformat
method
handles this by rounding up.123.78 000000.000 000123.780 The pattern
specifies leading and
trailing zeros, because the zero
character is used instead of the
pound sign (#).12345.67 $###,###.### $12,345.67 The first character in the pattern
is the dollar sign ($).
Note that the dollar sign immediately
precedes the left-most digit in
the formattedoutput
.12345.67 \u00a5###,###.### ¥12,345.67 The pattern
specifies the currency
sign for Japanese yen (¥)
with the Unicode value \u00a5.Locale-sensitive Formatting
The preceding example created aDecimalFormat
object for the defaultLocale
. If you want aDecimalFormat
object for a non-defaultLocale
, you instantiate aNumberFormat
and then cast it toDecimalFormat
. Then, theDecimalFormat
object will format the patterns you define in a locale-sensitive manner. Here's an example:Running the previous code example results in the output that follows. The formatted number, which is in the second column, varies withNumberFormat nf = NumberFormat.getNumberInstance(loc); DecimalFormat df = (DecimalFormat)nf; df.applyPattern(pattern); String output = df.format(value); System.out.println(pattern + " " + output + " " + loc.toString());Locale
:So far, the formatting patterns discussed here follow the conventions of U.S. English. For example, in the pattern "###,###.##" the comma is the thousands-separator and the period represents the decimal point. This convention is fine, provided that your end-users aren't exposed to it. However, some applications, like spreadsheets and report generators, allow the end-users to define their own formatting patterns. For these applications, the formatting patterns specified by the end-users should use localized notation. In these cases, you'll want to invoke the###,###.### 123,456.789 en_US ###,###.### 123.456,789 de_DE ###,###.### 123 456,789 fr_FRapplyLocalizedPattern
method upon theDecimalFormat
object.Altering the Formatting Symbols
With the DecimalFormatSymbolsclass you can change the symbols that appear in the formatted numbers produced by theformat
method. These symbols include the decimal separator, the grouping separator, the minus sign, and the percent sign, among others.The next example demonstrates the
DecimalFormatSymbols
class by applying an unusual format to a number. The strange format is the result of the calls to thesetDecimalSeparator
,setGroupingSeparator
, andsetGroupingSize
methods.When run, this example prints the number in a bizarre format:DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(currentLocale); unusualSymbols.setDecimalSeparator('|'); unusualSymbols.setGroupingSeparator('^'); String strange = "#,##0.###"; DecimalFormat weirdFormatter = new DecimalFormat(strange, unusualSymbols); weirdFormatter.setGroupingSize(4); String bizarre = weirdFormatter.format(12345.678); System.out.println(bizarre);1^2345|678
Formatting |