字符串的格式化输出

输出数字、字符串和日期等数据时,常常要求按照指定的格式进行输出。本节介绍字符串格式化输出的函数及其使用方法。[大谦MATLAB,dqmatlab点com]

实现字符串的格式化输出

【MATLAB】

MATLAB中可以用sprintf函数实现字符串的格式化输出。该函数的语法格式为:

code.matlab
str=sprintf(formatSpec,A1,...,An)

其中,formatSpec参数指定格式化操作符,A1,…,An为输入数据,返回输入数据的格式化字符串表示。

格式化操作符具有类似下面的格式:

code.matlab
% 3$ 0- 12.5 b u

其中,百分号%是必需的,用它打头。最后的u是转换字符的一种,也是必需的。可以在%和转换字符之间指定标识符(如格式中的3$)、标志(如格式中的0-)、字段宽度(如格式中的12)、精度(如格式中的5)和子类型操作符(如格式中的b),操作符之间的空格无效。

转换字符的种类如表5-1所示。

表5-1转换字符

值类型 转换 详细信息
有符号整数 %d 或 %i 十进制
无符号整数 %u 十进制
无符号整数 %o 八进制
无符号整数 %x 十六进制),小写字母a–f
无符号整数 %X 与%x相同,大写字母A–F
浮点数 %f 定点记数法(使用精度操作符指定小数点后的位数)
浮点数 %e 指数记数法,例如 3.141593e+00(使用精度操作符指定小数点后的位数)
浮点数 %E 与%e相同,但为大写,例如3.141593E+00(使用精度操作符指定小数点后的位数)
浮点数 %g 更紧凑的%e或%f,不带尾随零(使用精度操作符指定有效数字位数)
浮点数 %G 更紧凑的%E或%f,不带尾随零(使用精度操作符指定有效数字位数)
字符或字符串 %c 单个字符
字符或字符串 %s 字符向量或字符串数组。输出文本的类型与formatSpec的类型相同

标识符处理函数输入参数的顺序。使用语法n$,其中 n 代表函数调用中其他输入参数的位置。例如('%3$s %2$s %1$s %2$s','A','B','C') 将输入参数 'A'、'B'、'C' 输出为:C B A B。

常见的标志如表5-2所示。

表5-2 标志

标 志 说 明 示 例
'–' 左对齐 %-5.2f
'+' 始终为任何数值输出符号字符(+ 或 –) %+5.3f
' ' 在值之前插入空格 % 5.3f
'0' 在值之前补零以填充字段宽度 %05.3f
'#' 修改选定的数值转换 %#5.0f

字符宽度表示要输出的字符最少个数。

精度表示浮点数小数点后面的位数。

子类型用于将浮点数显示为八进制、十进制或十六进制。子类型表示与对应的输出值类型如表5-3所示。

表5-3 子类型表示与对应的输出值类型

输入值类型 子类型和转换字符 输出值类型
浮点数 %bx或%bX 双精度十六进制
浮点数 %bo 双精度八进制
浮点数 %bu 双精度十进制
浮点数 %tx或%tX 单精度十六进制
浮点数 %to 单精度八进制
浮点数 %tu 单精度十进制

下面举几个例子。

按指定格式输出字符串和数字。

code.matlab
>> sprintf("%s %s %d","hello","python",2023)
ans=
    "hello python 2023"

输出圆周率,小数点后面保留11位。

code.matlab
>> sprintf("%12.11f",pi)
ans=
    "3.14159265359"

输出圆周率,小数点后面保留8位,一共12位,不足时在前面补0。

code.matlab
>> sprintf("%012.8f",pi)
ans=
    "003.14159265"

【Python】

用print函数输出字符串时,可以指定字符串的输出格式。其基本格式为:

code.python
print('占位符1 占位符2' % (字符串1,字符串2))

其中,占位符用于表示该位置字符串的内容和格式。各占位符位置上字符串的内容按先后顺序取百分号后面小括号里面的字符串。常见的字符串占位符如表5-5所示。

表5-5 用于字符串格式化的占位符

格 式 说 明
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%o 格式化八进制数
%x 格式化十六进制数
%X 格式化十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g 自动选择%f或%e
%G 自动选择%F或%E
%p 用十六进制数格式化变量的地址

下面结合实例说明字符串占位符的使用。

code.python
>>> print('hello %s' % 'python')
hello python
>>> print('%s %s %d' % ('hello', 'python',2021))
hello python 2021

可以指定显示数字的符号、宽度和数字精度。下面指定按浮点数输出圆周率的值,数字宽度为10个字符,小数位为5位,显示正号。

code.python
>>> print('%+10.5f' % 3.1415927)
  +3.14159

结果显示,小数点算1个字符,如果整个数字的宽度不足10个字符,数字前面用空格补齐。如果显示负号,则在数字末尾用空格补齐。不足位也可以用0补齐,如:

code.python
>>> print('%010.5f' % 3.1415927)
0003.14159

除了使用占位符对字符串进行格式化,还可以用format函数来实现。该函数用大括号{}标明被替换的字符串,与%占位符的类似。使用format函数进行格式化时更灵活,更方便。

下面是使用format函数进行字符串格式化输出的一些例子。{}中为空时,按先后顺序用format函数参数指定的字符串进行替换。

code.python
>>> print('不指定顺序:{} {}'.format('hello','python'))
不指定顺序:hello python

在{}中用整数指定占位位置上显示什么字符串,该整数表示format函数参数指定的字符串出现的先后顺序,基数为0。

code.python
>>> print('指定顺序:{1} {0}'.format('hello','python'))
指定顺序:python hello

有重复的情况。

code.python
>>> print('{0} {1} {0} {1}'.format('hello','python'))
hello python hello python

显示为浮点数并指定小数位数:

code.python
>>> print('保留两位小数:{:.2f}'.format(3.1415))
保留两位小数:3.14

字符串显示为百分比格式,指定小数位数:

code.python
>>> print('{:.3%}'.format(0.12))
12.000%

用参数名称进行匹配:

code.python
>>> print('{name},{age}'.format(age=30,name='张三'))
张三,30