关于DecimalFormat类的数字格式化


当我们遇到小数时,必定会设置保留小数的位数,也可能会涉及数字的格式转换
那么在Java中肯定也有这样的一个类,就是DecimalFormat类能帮助我们方便快捷的解决此类小数格式的问题

DecimalFormat 类路径 java.text.DecimalFormat
DecimalFormat 的父类也是抽象类NumberFormat 类路径 java.text.NumberFormat 很有意思的是 NumberFormat 的父类是 Format
Format应该很熟悉吧,说熟悉的原因是因为他的子类 DateFormat 与 SimpleDateFormat 在日期格式的转换上经常使用到的
DecimalFormat :用于格式化十进制数字

先大概了解下 DecimalFormat 是如何进行格式化的?

基本格式化:

/*定义一个浮点型变量 Π*/
double pai = 3.1415926535;//圆周率

/*1.创建DecimalFormat对象
(在创建对象时就可以填入特殊符号格式,也可以使用applyPattern(String pattern)方法填入)
DecimalFormat decimalFormat = new DecimalFormat("0.00");就可以直接省去第二步的代码*/
DecimalFormat decimalFormat = new DecimalFormat();

/*2.定制格式
(参数就是根据DecimalFormat中的多种特殊符号来进行格式化)*/
decimalFormat.applyPattern("0.00");//比如这里的 格式:"0" 就代表只取整数部分

/*3.传入值并转换数字(format是个重载方法)单个参数返回String,多个参数返回StringBuffer*/
String format = decimalFormat.format(pai);

/*4.打印输出(保留两位小数 = 3.14)*/
System.out.println(format);


/*一行代码搞定:链式编程(节省代码量) 格式:"0.00" 代表取整数并保留两位小数*/
System.out.println(new DecimalFormat("0.00").format(pai));

上面介绍了如何对数字进行简单的格式化,下面了解 DecimalFormat 类中的几种特殊符号,不同符号代表不同的格式

不同特殊符号代码的格式:

先了解下在格式化中会用到的特殊符号(可以参考Java官方文档)DecimalFormat 类官方中文API 下图是从官方文档截的图:

在这里插入图片描述

不同符号的使用:

注:下面为了方便测试多种格式,这里就直接链式编程简化为一行代码后输出结果
给大家举一些不同格式的例子:

  1. #和0配合使用
/* 
0
	整数位的0:取所有整数位,多余位数填充0
   小数位的0:保留小数的位数,是几个0就保留几位,多余位数也会填充0
#.##
	整数位的#:取全部整数部分,多余的#不会填充0(所以写一个#就行了)
	小数位的#:代表保留小数多少位,多余的#也不会填充0
	作用与0相同,但是多余位数不会填充0
#.##%
	将数字 * 100 然后取整数部分并保留两位小数
	3.1415926 * 100 = 314.15926 格式化后为 314.16(舍入的小数部分会四舍五入)
*/

double pai = 3.1415926;//圆周率

//取一位整数
System.out.println(new DecimalFormat("0").format(pai));//3
//取一位整数和两位小数
System.out.println(new DecimalFormat("0.00").format(pai));//3.14
//取两位整数和三位小数,整数不足部分以0填补。
System.out.println(new DecimalFormat("00.000").format(pai));// 03.142
//取所有整数部分
System.out.println(new DecimalFormat("#").format(pai));//3
//以百分比方式计数,并取两位小数
System.out.println(new DecimalFormat("#.##%").format(pai));//314.16%
  1. 科学计数法 E
double 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. 分组分隔符和减号
  • 分隔符 ,
int 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
  • 减号 -
    代表输出负数
double number = 3.1415926;

/*多余的整数位填充0,并保留两位小数点*/
System.out.println(new DecimalFormat("-00.00").format(number));//结果:-03.14

4.关于前缀、后缀

  • % 将数字乘以100(放大100倍)
double number = 0.05731;

System.out.println(new DecimalFormat("0.00%").format(number));//5.73%
System.out.println(new DecimalFormat("0%.00").format(number));//5.73%
System.out.println(new DecimalFormat("%0.00").format(number));//%5.73

/*0.05731 乘以 100 = 5.731 取一位整数并保留两位小数,但是如果有多余的整数位或小数位会被填充为0, % 可作为前缀 %5.73 也可做为后缀 5.73%*/
  • \u2030 将数字乘以1000(放大1000倍)
double number = 0.05731;

System.out.println(new DecimalFormat("0.00\u2030").format(number));//57.31‰
System.out.println(new DecimalFormat("0.0\u20300").format(number));//57.31‰
System.out.println(new DecimalFormat("\u20300.00").format(number));//‰57.31

/*0.05731 乘以 1000 = 57.31 取一位整数并保留两位小数,如果有多余的整数位或小数位会被填充为0, ‰ 可作为前缀 ‰57.71 也可做为后缀 57.31‰*/
  • ¤(\u00A4) 本地化货币符号
double number = 8361.123;

System.out.println(new DecimalFormat(",000.00¤").format(number));//8,361.12¥
System.out.println(new DecimalFormat(",000.¤00").format(number));//8,361.12¥
System.out.println(new DecimalFormat("¤,000.00").format(number));//¥8,361.12
System.out.println(new DecimalFormat(",00¤0.¤00").format(number));//8,361.12¥¥
System.out.println(new DecimalFormat("¤,000.¤00").format(number));//¥8,361.12¥
System.out.println(new DecimalFormat(",000.00¤¤").format(number));//8,361.12CNY

/*CNY: 人民币*/
  • 用于引用特殊的字符(自定义字符),作为前缀或后缀
double number = 9.73;

System.out.println(new DecimalFormat("'#'0.00").format(number));	//#9.73
System.out.println(new DecimalFormat("&0.00").format(number));		//&9.73
//使用'本身作为前缀或后缀 注意是两个 '
System.out.println(new DecimalFormat("''0.00").format(number));		//'9.73
System.out.println(new DecimalFormat("'^ _ ^'0.00").format(number));//^ _ ^9.73

注:DecimalFormat 提供 RoundingMode 中定义的舍入方式进行四舍五入然后格式。默认情况下,它使用 RoundingMode.HALF_EVEN
舍入方式在上一篇中已经讲到 关于BigDecimal类的常用方法与的舍入方式 其中 RoundingMode.HALF_EVEN 方式使用的是银行家舍入法
银行家舍入法:即四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一(可以去网上了解下)

大多数人如果能给更多事情一个机会的话,他们的问题都能解决
  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaDecimalFormat是一个用于格式化数字。它可以将数字格式化为指定的模式,例如货币格式、百分比格式等。DecimalFormat可以通过设置模式字符串来控制数字格式化方式。模式字符串包含特殊字符,例如“#”和“”,用于指定数字的位数和小数点位置。DecimalFormat还提供了一些方法,例如format()方法,用于将数字格式化为字符串,以及parse()方法,用于将字符串解析为数字。 ### 回答2: DecimalFormatJava中的一个,用于格式化数字。它提供了一种将数字格式化为特定模式的方式,可以定制数字的格式,例如小数点后的位数、千分位分隔符等等。 使用DecimalFormat,首先需要实例化一个DecimalFormat对象,可以根据自己的需求传入特定的格式模式。一般情况下,格式模式是由数字、千分位分隔符和小数点符号组成的。 示例: DecimalFormat df = new DecimalFormat("#,###.00"); 在这个示例中,格式模式是"#,###.00",它指定了数字的格式为千分位分隔符和小数点后两位小数。 接下来,可以使用DecimalFormat对象的format方法将数字格式化为指定的格式。例如: String result = df.format(12345.678); 在这个例子中,变量result将会存储格式化后的结果"12,345.68"。 DecimalFormat还提供了其他的方法,比如可以设置货币符号、设置正负号等等。通过这些方法,我们可以更加灵活地控制数字的格式。 总的来说,DecimalFormatJava中用于格式化数字。通过指定特定的格式模式,我们可以格式化数字并进行灵活的控制,得到我们想要的输出结果。 ### 回答3: DecimalFormatJava 中的一个,用于格式化数字。它可用于将数字按照指定的格式进行格式化,如添加千位分隔符、设置小数位数等。 使用 DecimalFormat,我们首先需要创建一个 DecimalFormat 对象,并指定格式模式。格式模式是一个字符串,由特定的符号和占位符组成,用于定义数字的格式。 例如,要将一个数字格式化为带有小数点后两位的字符串,可以这样做: ```java DecimalFormat df = new DecimalFormat("0.00"); double number = 1234.5678; String formattedNumber = df.format(number); System.out.println(formattedNumber); ``` 这样就会将数字 1234.5678 格式化为字符串 "1234.57"。 除了指定小数位数,DecimalFormat 还支持其他常用的格式化选项,如千位分隔符和百分号。 例如,要将一个大数添加千位分隔符并格式化为百分数,可以这样做: ```java DecimalFormat df = new DecimalFormat("#,###.00%"); double number = 0.1234; String formattedNumber = df.format(number); System.out.println(formattedNumber); ``` 这样就会将数字 0.1234 格式化为字符串 "12.34%"。 除了使用预定义的格式模式,我们还可以通过自定义模式来实现更复杂的格式化需求。在格式模式中,可以使用特殊字符来表示数字的各个部分,如 # 表示可选的数字位,0 表示必需的数字位,同时还可以使用分组符号、货币符号等。 综上所述,DecimalFormatJava 中用于数字格式化的一个,它可以根据指定的格式将数字转换为字符串,并支持设置各种格式选项,如小数位数、千位分隔符和百分号等。通过使用 DecimalFormat,我们可以轻松地进行数字格式化的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值