Logo

郎哥编程

格式化输出

2019-12-08 1048

System.out的print和println方法,可以向控制台输出不同类型的数据,可以满足程序调试信息的输出要求。在实际应用中,输出数据时,要求数据必须按照一定的格式输出,如数据精度要求,小数点后保留2位有效数字、按照规定的格式输出日期、按照表格方式输出数据等要求。

System.out的printf方法可以对数据进行格式化输出,printf方法在Java API 文档中声明如下:

void  printf(String format, Object... args)

中文注解:一个便捷的方法,使用指定的格式字符串和传入的参数,将格式化的字符串输出到输出流(输出设备)

传入的参数

String  format

字符串类型,符合格式字符串语法描述的字符串

Object... args

格式字符串中格式说明符引用的参数,参数的数量是可变的,可以为零。

案例1:一个简单格式化输出的例子。在PbaseUnit8项目unit包下创建PrintfSample类。代码如下:

/** 
* @Title: PrintfSample.java 
* @Package unit 
* @Description: Java基础知识课程案例 
* @author 编程训练营 
* @version V1.0 
*/ 
 
package unit;
 
/** 
* @ClassName: PrintfSample 
* @Description: Java API库的使用(格式化输出)案例1
* @author 编程训练营 
* 
*/
 
public class PrintfSample {
 
    /**
     * @Title: main
     * @Description: Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型 @throws
     */
 
    public static void main(String[] args) {
       /**
        * 声明双精度浮点变量并赋值,
        */
       double dTemp = 129.6789603;
 
       // 用println方法输出dTemp
       System.out.println("这是用println输出的数据:" + dTemp);
 
       // 用printf方法输出dTemp,保留2为有效小数
       System.out.printf("%s:%.2f", "这是用printf输出的数据", dTemp);
 
    }
 
}

代码结构分析

程序功能主要是演示println方法和printf的输出双精度浮点数的区别,println方法输出双精度浮点数时,不能对小数的有效位数控制输出,printf方法可以控制小数有效位数的输出。

程序增加了块注释语句,用于方法、语句以及变量的具体说明,提高程序代码的可读性和可维护性。块注释里的说明语句用“/*……*/”包括,每行说明语句用“*”开头。

printf语句中的“%s:%.2f”是格式字符串,其中“%s”是格式说明符,表示输出字符串,字符串内容取自格式字符串后面的参数列表,“%.2f”也是格式说明符,表示输出浮点数,并且保留2位有效小数,更改“%.”后面的数字,可以限制不同的小数位数输出,浮点数数值取自格式字符串后面的参数列表。参数列表跟在格式字符串后面,格式字符串中有多少个格式说明符,后面就有多少个参数,每个参数之间用英文逗号分隔。因为格式字符串“%s:%.2f”有两个格式说明符,因此在格式字符串后面应有两个参数,参数顺序与格式字符串中的格式说明符顺序保持一致,参数"这是用printf输出的数据"对应格式说明符%s,参数“dTemp”对应格式说明符%.2f。

程序执行结果如下图所示:

image.png                                             

从运行结果可以看出,printf方法可以控制浮点数小数位数的输出。

printf方法常用格式说明符列表

%c        单个字符

%d        十进制整数

%f        十进制浮点数

%o        八进制数

%s        字符串

%u        无符号十进制数

%x        十六进制数

%%        输出百分号%

printf的常用格式控制:

%0m.n格式字符

下面对组成格式说明的各项加以说明:

%   格式说明的起始符号,不可缺少。

0    有0表示指定空位填0,如省略表示指定空位不填。

m.n  m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度。用于说明输出的实型数的小数位数。未指定n时,隐含的精度为n=6位。例如:%.2f,m位默认位数,小数保留2位;%9.2f,意思是位数为9位,小数保留2位;%09.2f,意思是位数为9位,小数保留2位,位数不足的用0补齐。

案例2:格式化输出的例子。在PbaseUnit8项目unit包下创建PrintfSample2类。代码如下:

/** 
* @Title: PrintfSample2.java 
* @Package unit 
* @Description: Java基础知识课程案例  
* @author 编程训练营 
* @version V1.0 
*/ 
 
package unit;
 
/** 
* @ClassName: PrintfSample2 
* @Description: Java API库的使用(格式化输出)案例2 
* @author 编程训练营 
* 
*/
 
public class PrintfSample2 {
 
    /**
     * @Title: main
     * @Description: Java程序入口main方法
     * @param @param args 参数
     *
     * @return void 返回类型
     * @throws
     */
 
    public static void main(String[] args) {
       /**
        * 声明字符串类型变量并赋值,
        */
       String szTemp = "y格式化输出演示";
       /**
        * 声明双精度浮点变量并赋值,
        */
       double dTemp = 129.6789603;
 
       /**
        * 声明字符型变量并赋值,
        */
       char chTemp = 'a';
       // 用printf方法输出szTemp,字符串前后分别填充2个*字符
       System.out.printf("**%s**\n", szTemp);
       // 用printf方法输出dTemp,位数宽度为9,保留2为有效小数,空位用0填充
       System.out.printf("%s:%09.2f\n", "输出浮点型变量", dTemp);
 
       // 用printf方法输出chTemp,分别输出字符、十进制、十六进制
       System.out.printf("%s:%c:\n十进制:%d:\n十六进制:%x\n", "输出字符型变量", chTemp, (int) chTemp, (int) chTemp);
 
    }
 
}

代码结构分析

程序功能主要是演示printf的格式化输出,分别格式化输出字符串、浮点型和字符型数据。

程序的变量命名采用了匈牙利命名法,匈牙利命名法是一种编程时的命名规范,匈牙利命名法的基本原则是对每一变量的名称都要求有明确含义,变量的类型通过规定的前缀字母来识别。例如:ch表示字符型数据、sz表示字符串类型、d表示双精度浮点数等。

在“System.out.printf("**%s**\n",szTemp);”语句中,“”**%s**\n"”是格式字符串,%s表示输出字符串,字符串的内容来自szTemp,%s前面和后面的**是要输出的字符串内容,格式字符串里面可以添加任何想要输出的内容。\n是换行符,下次输出时将会另起一行。

在“System.out.printf("%s:%09.2f\n","输出浮点型变量",dTemp); ”语句中,第一个%s的内容来自于格式字符串后面的第一个字符串参数“输出浮点型变量”,%09.2f表示输出9位数浮点数,保留2位有效小数,位数不足的,前面用0填充,浮点数值内容来自于dTemp。

该语句也可以改写为下面的语句,效果是等同的:

System.out.printf("输出浮点型变量:%09.2f\n",dTemp);

在输出字符型变量语句中,分别应用%c、 %d和%x将字符型变量按照字符、十进制数值和十六进制数值输出,其中“(int)”是将字符类型强制转换为int类型操作符,其意义是将字符强制转换为数值输出。

程序执行结果如下图所示:

image.png


从上面输出的结果可以看出,格式化输出方法printf可以按照程序指定的格式输出数据。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论