1. 一个程序引例
上篇文章已经介绍了格式化文本的初步应用,程序示例如下:
sprintf('|%f\n|%.2f\n|%8.2f',pi*ones(1,3))
2. 格式化操作符各字段的含义解析
格式化操作符可以有六个字段,只有主字符%和转换格式是必需的,其他都是可选的,如下图所示:
2.1 转换格式
对于上述格式化操作符的六个字段,从右往左依次说明,首先说 转换格式,不同的标识符代表了不通的数据类型,如下表所示:
字段 | 描述 |
---|---|
c | 单个字符 |
d | 十进制符号(有符号) |
e | 指数表示法(使用小写e,如3.1415e+00) |
E | 指数表示法(使用大写E,如3.1415E+00) |
f | 定点表示法(常用) |
g | %e或更紧凑的%f(不重要的零不显示) |
G | 同%g,但使用大写E |
o | 八进制符号(无符号) |
s | 字符向量或字符串数组 |
u | 十进制符号(无符号) |
x | 十六进制符号(无符号,使用小写字母a- f) |
X | 十六进制符号(无符号,使用大写字母A- F) |
2.2 子类型
一般的,使用整型数转换成八进制,十进制或十六进制;
同理,对于类型%o,%x,%X,和%u,如果没有子类型字段,转换字符把输入数据视为整数;
对于上述类型,如果需要把输入数据视为浮点值,并将其转换为八进制,十进制或十六进制表示形式,使用b或t作为子类型说明符;
b表示把输入数据看作双精度浮点值而不是无符号整数;
t表示把输入数据看作单精度浮点值而不是无符号整数;
2.3 精度和字段宽度
精度和字段宽度是一个非负整数,用句点隔开;
对于%g,精度表示显示有效数字的数目;
对于%f,%e和%E,精度表示小数点右边显示数字的数目;
字段宽度用于指定输出中的位数或字符数;
当设定字段宽度大于字符数时,默认使用空格补齐;
如果未指定精度,则默认为六位;
如果指定精度p小于输入值小数部分的位数,则在小数点后面按四舍五入方式只显示p位数字;
如果指定精度p大于输入值小数部分的位数f,则在小数点后面显示p位数字,小数部分向右延伸,p-f位用0填充;
如果未指定字段宽度,则默认为p+1+n,其中n是输入值整数部分的位数;
如果指定字段宽度w大于p+1+n,则输出值的左侧将被填充w-(p+1+n)个其他字符,除非指定为0,否则默认填充空格字符;
如果字段宽度小于等于输入文本中的字符数,则不起作用;
2.4 标志
有些表示填充符号,有些表示特殊设置,如下表所示:
字符 | 描述 | 例 |
---|---|---|
减号(-) | 在字段宽度内令转换后的参数左对齐 | %-5.2d |
加号(+) | 对于数字值,显示为前导符号 对于文本值,在字段宽度内令转换后的参数右对齐 | %+5.2d %+5s |
空格( ) | 在值之前填充空格。 | % 5.2f |
零(0) | 用零填充而不是空格 | %05.2f |
英镑符号(#) | 修改选定的数字转换: 对于%o,%x或%X,显示为0,0x或0X前缀 对于%f,%e或者%E,即使精度为0,也可以显示小数点 对于%g或%G,不要删除尾随零或小数点 | %#5.0f |
2.5 识别符
默认情况下,sprintf将输入参数的值按顺序显示到输出文本中;
要以非默认顺序处理,使用数字标识符指定顺序;
用紧跟在%后面,并且尾随$的一个整数指定非连续参数;
2.6 补充特殊字符
特殊字符可以是输出文本的一部分,但是因为它们不能作为普通文本输入,需要通过特定的转义字符表示它们,如表
特殊字符 | 表示方法 |
---|---|
单引号 | '' |
百分号 | %% |
反斜杠 | \\ |
报警 | \a |
退格 | \b |
换页 | \f |
换行 | \n |
回车 | \r |
水平tab | \t |
垂直tab | \v |
字符的Unicode数字值可以由十六进制数来表示 | \xN 例如: sprintf('\x3D') 返回'=' |
字符的Unicode数字值可以用八进制数来表示 | \N 例如: sprintf('\102') 返回'B' |
2.7 补充
字段宽度和精度由外部指定。可以使用顺序参数列表中的值指定字段宽度和精度,使用星号(*)作为字段宽度或精度的占位符。
如果输入参数比格式运算符多,则格式运算符将被重用。注意,只有使用顺序排序格式操作符被重用。使用编号标识符时不能重用。
编号识别符和普通顺序不混用,会在两者转换时输出停止。
更多精彩相关内容
1.9/Matlab矩阵索引/下标索引/线性索引/逻辑索引/黄金级必备知识点
35.2 Matlab循环语句
1.49/Matlab实时脚本/写论文必备技能
1.32/Matlab格式化文本字符sprintf
Matlab基础入门1.4 脚本编程
End