数字格式化在生活中会经常遇到,我们经常选择DecimalFormat类来进行数字格式化操作。
DecimalFormat支持的特殊符号
符号 | 位置。含义 |
---|---|
0 | 数字。如果该位不存在数字,则用0补充 |
# | 数字。在不影响数值的情况下,该位为0或不存在时,不予补充 |
. | 数字。小数点 |
- | 数字。减号 |
, | 数字。数字分组符号 |
E | 用于表示科学计数法 |
% | 前缀或后缀。乘以 100 并显示为百分数 |
\u2030 | 前缀或后缀。乘以 1000 并显示为千分数 |
¤ (\u00A4) | 前缀或后缀。货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。 |
’ | 前缀或后缀。用于在前缀或或后缀中为特殊字符加引号。 |
; | 子模式边界。分隔正数和负数子模式 |
DecimalFormat的构造器
1、 public DecimalFormat()
使用默认模式和默认语言环境的符号创建一个 DecimalFormat。
使用该构造器的对象之前必须使用applyPattern()方法设置格式化的格式。
2、 public DecimalFormat(String pattern)
使用给定的模式和默认语言环境的符号创建一个 DecimalFormat。
3、 public DecimalFormat(String pattern,DecimalFormatSymbols symbols)
使用给定的模式和符号创建一个 DecimalFormat。需要完全自定义格式化的行为时使用此构造方法。
具体操作
小数点前后的保留
import org.junit.Test;
import java.text.DecimalFormat;
public class TestDF {
public double pi = 3.14159265358979323846;
public DecimalFormat df = new DecimalFormat();
//使用0和.进行数字格式化
@Test
public void test1 () {
df.applyPattern("0.0");
System.out.println(df.format(pi));
//输出结果:3.1
df.applyPattern("00.0");
System.out.println(df.format(pi));
//输出结果:03.1
df.applyPattern("0.00");
System.out.println(df.format(pi));
//输出结果:3.14
}
//使用#和.进行数字格式化
@Test
public void test2 () {
df.applyPattern("#.#");
System.out.println(df.format(pi));
//输出结果:3.1
df.applyPattern("##.#");
System.out.println(df.format(pi));
//输出结果:3.1
df.applyPattern("#.##");
System.out.println(df.format(pi));
//输出结果:3.14
}
}
值得注意的是:一段pattern里只允许出现一次小数点
嵌入文本
import org.junit.Test;
import java.text.DecimalFormat;
public class TestDF {
public double pi = 3.14159265358979323846;
public DecimalFormat df = new DecimalFormat();
@Test
public void test3 () {
df.applyPattern("圆周率:00.00");
System.out.println(df.format(pi));
//输出结果:圆周率:03.14
}
@Test
public void test4 () {
df.applyPattern("圆周率:##.##");
System.out.println(df.format(pi));
//输出结果:圆周率:3.14
}
@Test
public void test5 () {
df.applyPattern("##圆周率.##");
System.out.println(df.format(pi));
//输出结果:3.14圆周率
}
}
取负数
import org.junit.Test;
import java.text.DecimalFormat;
public class TestDF {
public double pi = 3.14159265358979323846;
public DecimalFormat df = new DecimalFormat();
@Test
public void test6 () {
df.applyPattern("-##.###");
System.out.println(df.format(pi));
//输出结果:-3.142
df.applyPattern("##.-###");
System.out.println(df.format(pi));
//输出结果:3.142-【和添加字符的效果相同】
}
}
使用【,】分隔
import org.junit.Test;
import java.text.DecimalFormat;
public class TestDF {
public double pi = 3.14159265358979323846;
public DecimalFormat df = new DecimalFormat();
@Test
public void test7 () {
pi = pi * 1000000;
df.applyPattern("#,###.##");
System.out.println(df.format(pi));
//输出结果:3,141,592.65
df.applyPattern("#,##.##");
System.out.println(df.format(pi));
//输出结果:3,14,15,92.65
}
}
科学计数法
import org.junit.Test;
import java.text.DecimalFormat;
public class TestDF {
public double pi = 31415926535.8979323846;
public DecimalFormat df = new DecimalFormat();
//test8全是错例
@Test
public void test8 () {
df.applyPattern("##.##E##");
System.out.println(df.format(pi));
//运行结果:java.lang.IllegalArgumentException
df.applyPattern("00.00E");
System.out.println(df.format(pi));
//运行结果:java.lang.IllegalArgumentException
df.applyPattern("00.00E##");
System.out.println(df.format(pi));
//运行结果:java.lang.IllegalArgumentException
}
@Test
public void test9 () {
df.applyPattern("##.##E00");
System.out.println(df.format(pi));
//输出结果:3.142E10
df.applyPattern("00.00E00");
System.out.println(df.format(pi));
//输出结果:31.42E09
}
}
值得注意的是:E后面必须是0,不能是#
百分数和千分数
import org.junit.Test;
import java.text.DecimalFormat;
public class TestDF {
public double pi = 0.1466;
public DecimalFormat df = new DecimalFormat();
@Test
public void test10 () {
df.applyPattern("#.#%");
System.out.println(df.format(pi));
//输出结果:14.7%
df.applyPattern("0.0%");
System.out.println(df.format(pi));
//输出结果:14.7%
df.applyPattern("#.#\u2030");
System.out.println(df.format(pi));
//输出结果:146.6‰
}
}
货币
import org.junit.Test;
import java.text.DecimalFormat;
public class TestDF {
public DecimalFormat df = new DecimalFormat();
@Test
public void test11 () {
double money = 100.00;
df.applyPattern("\u00A4##.##");
System.out.println(df.format(money));
//输出结果:¥100
df.applyPattern("\u00A400.00");
System.out.println(df.format(money));
//输出结果:¥100.00
df.applyPattern("'$'00.00");
System.out.println(df.format(money));
//输出结果:$100.00
}
}
特殊符号
import org.junit.Test;
import java.text.DecimalFormat;
public class TestDF {
public DecimalFormat df = new DecimalFormat();
@Test
public void test12 () {
double money = 100.00;
df.applyPattern("'#'##.##");
System.out.println(df.format(money));
//输出结果:#100
df.applyPattern("''00.00");
System.out.println(df.format(money));
//输出结果:'100.00
df.applyPattern("00.'money'00");
System.out.println(df.format(money));
//运行结果:java.lang.IllegalArgumentException
}
}
值得注意的是:嵌入【’】(英文单引号)特殊符号时,只需要在前面加一个单引号即可
特殊符号只能添加在开头或者末尾