我们都知道程序有时候需要将数字进行格式化,那什么是数字格式化呢?所谓数字格式化,就是按着指定格式得到一个字符串。


例如,假设我们希望3.141592最多保留2位小数,那么得到的格式化字符串应当是"3.14";若是希望整数123456789按“千”分组,那么得到的格式化字符串应当是"123,456,789";如果希望数字12.3456保留3位小数,整数部分至少要显示3位,那么得到的格式化字符串应当是"012.346"。


在JDK 1.5版本之前,程序需要使用java.text包中的相关类,比如:DecimalFormat类,对数字型数据进行格式化。JDK 1.5版本提供了更为方便的Formatter类,Formatter类提供了一个和C语言printf函数类似的format方法:

format(格式化模式,值列表)

该方法按着“格式化模式”返回“值列表”的字符串表示。


目前,Java已经将format方法作为了String类的静态方法,因此,程序可以直接使用String类调用format方法对数字进行格式化。


1.格式化模式

format方法中的“格式化模式”是一个用双引号括起的字符序列,也就是字符串,该字符序列中的字符由格式符和普通字符所构成。


例如:"输出结果%d,%f,%d"中的%d和%f是格式符号,开始的4个汉字、中间的两个逗号是普通字符,需要注意的是,不是格式符的都被认为是普通字符,同学们可以查阅Java API中的java.util.Formatter类了解更多的格式符。format方法返回的字符串就是“格式化模式”中的格式符被替换为它得到的格式化结果后的字符串,例如:

String s = String.format("%.2f",3.141592);

那么s就是"3.14" ,因为%.2f对3.141592格式化的结果是3.14。


2.值列表

format方法中的“值列表”是用逗号分隔的变量、常量或表达式。要保证format方法“格式化模式”中的格式符的个数与“值列表”中列出的值的个数相同,例如:

String s = String.format("%d元%0.3f公斤%d台",123,456.777888,999);

那么,s就是"123元456.778公斤999台"。


3.格式化顺序

format方法默认按从左到右的顺序使用“格式化模式”中的格式符来格式化“值列表”中对应的值,而“格式化模式”中的普通字符保留原样,例如,假设int型变量x和double型变量y的值分别是123和3.1415926,那么对于:

String s = String.format("从左向右:%d,%.3f,%d",x,y,100);

那么,s就是"从左向右:123,3.142,100"。


如果不希望使用默认的顺序(从左向右)进行格式化,还可以在格式符前面添加索引符号:index$,例如,1$表示“值列表”中的第1个,2$表示“值列表”中的第2个,对于:

String s = String.format("不是从左向右:%2$.3f,%3$d,%1$d",x,y,100);

那么,s就是"不是从左向右:3.142,100,123"。


注意:如果准备在“格式化模式”中包含普通的%,在编写代码时需要连续输入两个%,例如:

String s = String.format("%d%%",89);

那么,s就是"89%"。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)