Matlab自学笔记二十七:详解格式化文本sprintf各参数设置方法

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

相关推荐
二闹23 分钟前
第十六章:监理基础知识(16.1监理的意义和作用--16.5监理要素)
笔记·产品经理
致***锌1 小时前
etf期权和个股期权哪个期权费更贵?
笔记
懒惰的bit10 天前
STM32F103C8T6 学习笔记摘要(四)
笔记·stm32·学习
zkyqss10 天前
OVS Faucet练习(下)
linux·笔记·openstack
浦东新村轱天乐10 天前
【麻省理工】《how to speaking》笔记
笔记
奔跑的蜗牛AZ10 天前
TiDB 字符串行转列与 JSON 数据查询优化知识笔记
笔记·json·tidb
cwtlw10 天前
Excel学习03
笔记·学习·其他·excel
杭州杭州杭州10 天前
计算机网络笔记
笔记·计算机网络
cyborg10 天前
终于再也不用在notion中写公式了
笔记
循环过三天10 天前
1.2、CAN总线帧格式
笔记·stm32·单片机·嵌入式硬件·学习