关于DecimalFormat类的数字格式化
本文最后更新于:2023年11月9日 晚上
关于DecimalFormat类的数字格式化
当我们遇到小数时,必定会设置保留小数的位数,也可能会涉及数字的格式转换
那么在Java中肯定也有这样的一个类,就是DecimalFormat类能帮助我们方便快捷的解决此类小数格式的问题
DecimalFormat 类路径 java.text.DecimalFormat
DecimalFormat 的父类也是抽象类NumberFormat 类路径 java.text.NumberFormat 很有意思的是 NumberFormat 的父类是 Format
Format应该很熟悉吧,说熟悉的原因是因为他的子类 DateFormat 与 SimpleDateFormat 在日期格式的转换上经常使用到的
DecimalFormat :用于格式化十进制数字
先大概了解下 DecimalFormat 是如何进行格式化的?
基本格式化:
1 |
|
上面介绍了如何对数字进行简单的格式化,下面了解 DecimalFormat 类中的几种特殊符号,不同符号代表不同的格式
不同特殊符号代码的格式:
先了解下在格式化中会用到的特殊符号(可以参考Java官方文档)DecimalFormat 类官方中文API 下图是从官方文档截的图:
不同符号的使用:
注:下面为了方便测试多种格式,这里就直接链式编程简化为一行代码后输出结果
给大家举一些不同格式的例子:
- #和0配合使用
1 |
|
- 科学计数法 E
1
2
3
4
5
6
7
8
9
10
11
12
13
14double number = 123456789.1234;
System.out.println(new DecimalFormat("0E0").format(number));//1E8
System.out.println(new DecimalFormat("0E00").format(number));//1E08
System.out.println(new DecimalFormat("#E0").format(number));//.1E9
System.out.println(new DecimalFormat("##E0").format(number));//1.2E8
System.out.println(new DecimalFormat("###E0").format(number));//123E6
System.out.println(new DecimalFormat("####E0").format(number));//1.235E8
System.out.println(new DecimalFormat("#####E0").format(number));//1234.6E5
System.out.println(new DecimalFormat("######E0").format(number));//123.457E6
System.out.println(new DecimalFormat("#######E0").format(number));//12.34568E7
System.out.println(new DecimalFormat("########E0").format(number));//1.2345679E8
System.out.println(new DecimalFormat("#########E0").format(number));//123456789E0
System.out.println(new DecimalFormat("##########E0").format(number));//123456789.1E0 - 分组分隔符和减号
- 分隔符 ,
1
2
3
4
5
6
7
8
9
10
11
12int number = 123456789;
//每两位以逗号,进行分隔
System.out.println(new DecimalFormat(",##").format(number));//1,23,45,67,89
//每三位以逗号,进行分隔
System.out.println(new DecimalFormat(",###").format(number));//123,,456,789
//每四位以逗号进行分隔
System.out.println(new DecimalFormat(",####").format(number));//1,2345,6789
System.out.println(new DecimalFormat("0,00").format(number));//12,99,79,24,58 - 减号 -
代表输出负数
1 |
|
4.关于前缀、后缀
- % 将数字乘以100(放大100倍)
1 |
|
- \u2030 将数字乘以1000(放大1000倍)
1 |
|
- ¤(\u00A4) 本地化货币符号
1 |
|
- 用于引用特殊的字符(自定义字符),作为前缀或后缀
1 |
|
注:DecimalFormat 提供 RoundingMode 中定义的舍入方式进行四舍五入然后格式。默认情况下,它使用 RoundingMode.HALF_EVEN
舍入方式在上一篇中已经讲到 关于BigDecimal类的常用方法与的舍入方式 其中 RoundingMode.HALF_EVEN 方式使用的是银行家舍入法
银行家舍入法:即四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一(可以去网上了解下)