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
来源
在本文中,我们展示了如何使用 DecimalFormat 在 Java 中格式化数字。
作者
列出所有Java教程。