ZetCode

Java DecimalFormat

上次修改时间:2024 年 7 月 4 日

在本文中,我们将展示如何在 Java 中格式化数字。

DecimalFormat 类用于格式化数字。 它是 NumberFormat 类的具体子类。

NumberFormat 用于格式化最常见情况下的数字。 DecimalFormat 提供了更多选项; 它允许我们定义我们的格式化选项。

DecimalFormat 位于 java.text 包中。

Double 值

0 格式说明符代表一个数字。 # 格式说明符代表一个数字,其中零显示为不存在。 . 说明符用于小数点分隔符。

Main.java
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));
    }
}

该程序使用两个格式说明符打印四个 double 值。

$ java Main.java
0,31 -  ,31 
 5,6 - 5,60 
 6,7 - 6,70 
   5 - 5,00 

applyPattern 方法

applyPattern 方法将给定的模式应用于现有格式。

Main.java
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));
}

该程序以两种格式格式化一个 double 值。

var df = new DecimalFormat("#.##");

我们创建 DecimalFormat 的新实例。 我们传递给它一个非本地化的模式字符串。 该模式定义了一个十进制值的格式,该格式带有一个点,后跟两位小数。

df.applyPattern("#.00");

我们使用 applyPattern 指定一个新模式。 此模式将零添加到小数位,如果它们为空。

分组数字

, 格式字符用于数字分组。

Main.java
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));
}

该程序打印一个 double 值,其数字已分组。

DecimalFormat 百分比

使用 % 格式字符,我们定义百分比。

Main.java
import java.text.DecimalFormat;

void main() {

    double n = 0.34;
    var pattern = "#.##%";

    var df = new DecimalFormat(pattern);
    System.out.println(df.format(n));
}

该程序将 double 值打印为百分比。

字符串字面量中的 DecimalFormat

我们可以将格式化的值放入字符串字面量中。

Main.java
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));
}

该程序在字符串内打印格式化的 double 值。

本地化的 DecimalFormat

下一个示例本地化了数字格式。

Main.java
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));
}

在该程序中,我们以三种不同的区域设置打印一个值。 分组和小数点分隔符根据给定的语言文化选择。

$ java Main.java
127 540,3
127,540.3
127.540,3

来源

Java DecimalFormat - 语言参考

在本文中,我们展示了如何使用 DecimalFormat 在 Java 中格式化数字。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有Java教程