Java DecimalFormat
last modified July 4, 2024
In this article we show how to format numbers in Java.
DecimalFormat class is used to format numbers. It is a concrete
subclass of the NumberFormat class.
NumberFormat is used to format numbers for the most common cases. 
DecimalFormat gives more options; it allows us to define our
formatting options.
DecimalFormat is located in the java.text package.
Double values
The 0 format specifier stands for a digit. The #
format specifier stands for a digit, where zero shows as absent. The
. specifier is for a decimal separator.
import java.text.DecimalFormat;
void main() {
    double[] vals = new double[] {0.31, 5.60, 6.7, 5};
    var pattern1 = "#.##";
    var pattern2 = "#.00";
    var df1 = new DecimalFormat(pattern1);
    var df2 = new DecimalFormat(pattern2);
    for (var val : vals) {
        System.out.printf("%4s - %4s %n", df1.format(val), df2.format(val));
    }
}
The program prints four double values using two format specifiers.
$ java Main.java 0,31 - ,31 5,6 - 5,60 6,7 - 6,70 5 - 5,00
The applyPattern method
The applyPattern method applies the given pattern to an existing
format.
import java.text.DecimalFormat;
void main() {
    double n = 1240.30;
    var df = new DecimalFormat("#.##");
    System.out.println(df.format(n));
    df.applyPattern("#.00");
    System.out.println(df.format(n));
}
The program formats a double value in two formats.
var df = new DecimalFormat("#.##");
We create a new instance of the DecimalFormat. We pass it a
non-localized pattern string. The pattern defines a format for a decimal value 
with a dot followed by two decimal places.
df.applyPattern("#.00");
We specify a new pattern with applyPattern. This pattern adds zeros 
to decimal places, if they are empty.
Grouping digits
The , format character is used for grouping of digits.
import java.text.DecimalFormat;
void main() {
    double n = 2_125_405.30;
    String pattern = "###,###.00";
    var df = new DecimalFormat(pattern);
    System.out.println(df.format(n));
}
The program prints a double value, whose digits are grouped.
DecimalFormat percentage
With the % format character, we define percentages.
import java.text.DecimalFormat;
void main() {
    double n = 0.34;
    var pattern = "#.##%";
    var df = new DecimalFormat(pattern);
    System.out.println(df.format(n));
}
The program prints a double value as a percentage.
DecimalFormat in string literal
We can put the formatted value in a string literal.
import java.text.DecimalFormat;
void main() {
    double n = 7.34;
    var pattern = "The #.## number";
    var df = new DecimalFormat(pattern);
    System.out.println(df.format(n));
}
The program prints the formatted double value inside a string.
Localized DecimalFormat
The next example localizes the number formats.
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
void main() {
    double n = 127_540.30;
    var skLoc = Locale.of("sk", "SK");
    var usLoc = Locale.of("us", "US");
    var deLoc = Locale.of("de", "DE");
    var pattern = "###,###.##";
    NumberFormat nf = NumberFormat.getNumberInstance(skLoc);
    DecimalFormat df = (DecimalFormat)nf;
    df.applyPattern(pattern);
    System.out.println(df.format(n));
    NumberFormat nf2 = NumberFormat.getNumberInstance(usLoc);
    DecimalFormat df2 = (DecimalFormat)nf2;
    df2.applyPattern(pattern);
    System.out.println(df2.format(n));
    NumberFormat nf3 = NumberFormat.getNumberInstance(deLoc);
    DecimalFormat df3 = (DecimalFormat)nf3;
    df3.applyPattern(pattern);
    System.out.println(df3.format(n));
}
In the program, we print a value in three different locales. The grouping and the decimal separators chosen according to the given language cultures.
$ java Main.java 127 540,3 127,540.3 127.540,3
Source
Java DecimalFormat - language reference
In this article we have shown how to format numbers in Java with
DecimalFormat.
Author
List all Java tutorials.