This section describes how to use the DecimalFormat
class in the
package. For general-purpose formatting
use the Formatter API, introduced in Java SE 5.
See
for more information.
You can use the DecimalFormat class to format decimal
numbers into 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 the DecimalFormatSymbols in conjunction with the
DecimalFormat class. These classes offer a great deal of
flexibility in the formatting of numbers, but they can make your code
more complex.
The text that follows uses examples that demonstrate the
DecimalFormat and DecimalFormatSymbols
classes. The code examples in this material are from a sample program
called
.
You specify the formatting properties ofDecimalFormatwith a patternString. The pattern determines what the formatted number looks like. The example that follows creates a formatter by passing a patternStringto theDecimalFormatconstructor. Theformatmethod accepts adoublevalue as an argument and returns the formatted number in aString: DecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(value); System.out.println(value + " " + pattern + " " + output); The output for the preceding lines of code is described in the following table. Thevalueis the number, adouble, that is to be formatted. Thepatternis theStringthat specifies the formatting properties. Theoutput, which is aString, represents the formatted number.
Output from DecimalFormatDemoProgramvaluepatternoutputExplanation 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 valuehas three digits to the right of the decimal point, but thepatternhas only two. Theformatmethod handles this by rounding up.123.78 000000.000 000123.780 The patternspecifies leading and trailing zeros, because the 0 character is used instead of the pound sign (#).12345.67 $###,###.### $12,345.67 The first character in the patternis the dollar sign ($). Note that it immediately precedes the leftmost digit in the formattedoutput.12345.67 \u00A5###,###.### ¥12,345.67 The patternspecifies the currency sign for Japanese yen (¥) with the Unicode value 00A5.
You can use theclass to change the symbols that appear in the formatted numbers produced by theformatmethod. These symbols include the decimal separator, the grouping separator, the minus sign, and the percent sign, among others.The next example demonstrates the
DecimalFormatSymbolsclass by applying a strange format to a number. The unusual format is the result of the calls to thesetDecimalSeparator,setGroupingSeparator, andsetGroupingSizemethods. 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);When run, this example prints the number in a bizarre format: 1^2345|678