Logo

郎哥编程

格式化输出

2021-04-05 67

学习目标:掌握printf()方法的使用,对输出的内容进行格式化设置。

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

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

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

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

传入的参数

String  format

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

Object... args

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

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

package com.unit;
/**
 * 日期:2021/4/5
 * 创建者:xinch
 */
public class Case18 {
    /**
    * @author:xinch
    * @date:2021/4/5
    * @description:使用printf保留2位小数
    */
    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。

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

41.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补齐。

案例19:格式化输出案例。在Punit19项目unit包下创建Case19类。代码如下:

package com.unit;
 
/**
 * 日期:2021/4/5
 * 创建者:xinch
 */
 
public class Case19 {
    /**
    * @author:xinch
    * @date:2021/4/5
    * @description:函数入口
    */
    public static void main(String[] args) {
        /**
         * 声明字符串类型变量并赋值,
         */
        String szTemp = "格式化输出演示";
        /**
         * 声明双精度浮点变量并赋值,
         */
        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类型操作符,其意义是将字符强制转换为数值输出。

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

43.png

printf方法的第一个参数格式字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以%开始, 后跟一个或几个规定字符,用来确定输出内容格式。printf方法的第二个参数是参量表,参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用“,”分开, 且顺序须一一对应, 否则将会出现意想不到的错误。

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

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

评论区

登录 后发表评论
暂无评论