ZetCode

Java DecimalFormat

last modified January 27, 2024

Java DecimalFormat tutorial shows 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.

Java DecimalFormat simple example

The following is a simple example with DecimalFormat.

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.

com/zetcode/DecimalFormatEx.java
package com.zetcode;

import java.text.DecimalFormat;

public class DecimalFormatEx {

    public static void main(String[] args) {

        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.

0.31 -  .31 
 5.6 - 5.60 
 6.7 - 6.70 
   5 - 5.00 

Java DecimalFormat applyPattern

The applyPattern method applies the given pattern to an existing format.

com/zetcode/DecimalFormatEx.java
package com.zetcode;

import java.text.DecimalFormat;

public class DecimalFormatEx {

    public static void main(String[] args) {

        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.

1240.3
1240.30

Java DecimalFormat grouping

The , format character is used for grouping of digits.

com/zetcode/
package com.zetcode;

import java.text.DecimalFormat;

public class DecimalFormatEx {

    public static void main(String[] args) {

        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.

2,125,405.30

Java DecimalFormat percentage

With the % format character, we define percentages.

com/zetcode/DecimalFormatEx.java
package com.zetcode;

import java.text.DecimalFormat;

public class DecimalFormatEx {

    public static void main(String[] args) {

        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.

34%

DecimalFormat in string literal

We can put the formatted value in a string literal.

com/zetcode/DecimalFormatEx.java
package com.zetcode;

import java.text.DecimalFormat;

public class DecimalFormatEx {

    public static void main(String[] args) {

        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.

The 7.34 number

Java localized DecimalFormat

The next example localizes the number formats.

com/zetcode/DecimalFormatEx.java
package com.zetcode;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

public class DecimalFormatEx {

    public static void main(String[] args) {

        double n = 127_540.30;
        var skLoc = new Locale("sk", "SK");
        var usLoc = new Locale("us", "US");
        var deLoc = new Locale("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.

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

My name is Jan Bodnar and I am a passionate programmer with many years of programming experience. I have been writing programming articles since 2007. So far, I have written over 1400 articles and 8 e-books. I have over eight years of experience in teaching programming.

List all Java tutorials.