格式化文本

2025年7月25日 | 阅读7分钟

数据以数组的形式保存。当我们显示数据时,它以数组的形式出现,而这可能并不总是具有代表性。因此,MATLAB 提供了一些格式化运算符,用于将数据转换为文本并将输出格式化为符合我们的要求。

  • 格式化运算符控制输出的表示法、对齐方式和有效数字。
  • 我们可以将格式化运算符与普通文本和特殊字符组合在一个格式说明符中。
  • 格式化运算符可与以下函数一起使用:compose、num2str、sprintf、fprintf、assert、error、warning 和 MException。

示例

输出

>> t

t =
  'Displaying 3 random numbers: 
      1)0.957167 
      2)0.49 
      3)0.800280'

MATLAB中格式化运算符的字段

百分号 (%) 始终引导格式化运算符。一个格式化运算符最多可以包含六个字段:转换字符、子类型、精度、字段宽度、标志和数字标识符。

  • 转换字符是所有六个字段中唯一必需的字段。
  • 转换字符必须始终由百分号 (%) 引导。
  • 格式化运算符的字段之间不允许有空格字符。

语法示例

Formatting Text

转换字符

转换字符是唯一必需的字段,它指定输出的表示法。转换字符由单个字母数字字符表示,并出现在格式说明符的最后。

序号转换字符描述
1.c单个字符
2.d十进制表示法(有符号)
3.e指数表示法(使用小写 e,如 3.1415e+00)
4.E指数表示法(使用大写 E,如 3.1415E+00)
5.f定点表示法
6.g比 %e 或 %f 更紧凑(不打印不重要的零)
7.G类似于 %g,但使用大写 E
8.o八进制表示法(无符号)
9.s字符向量或字符串数组
10.u十进制表示法(无符号)
11.x十六进制表示法(无符号,使用小写字母 a-f)
12.X十六进制表示法(无符号,使用大写字母 A-F)

示例

输出

>> res
res = 

    "c		d 
     d		100 
     e		1.000000e+02 
     E		1.000000E+02
     f		100.000000 
     g		100 
     G		100 
     o		144
     s		d
     u		100
     x		64
     X		64"

子类型

子类型字段由紧跟在转换字符之前的单个字母数字字符表示。转换字符 %o、%u、%x 和 %X 将数据输入视为整数,没有子类型字段。因此,使用以下子类型说明符之一将数据输入视为浮点值,并将其转换为八进制、十进制或十六进制表示。

子类型说明符描述
b将输入数据视为双精度浮点值,而不是无符号整数。
t将输入数据视为单精度浮点值,而不是无符号整数。

示例

输出

>> res

res =

    'before using subtype:	100
     after using subtype:	1120403456'

精度

精度字段由小数点(句点)后的一个非负整数表示。它与 %f、%e 和 %E 运算符一起使用,并指示小数点后要显示的数字位数。

示例

输出

>> res

res =

    'output without and with precision field:   94.247780  94.25  9.424778e+01  9.42e+01'

字段宽度

字段宽度是一个非负整数,可以带或不带小数点精度。正如精度字段指定小数点后的位数一样,字段宽度指定输出中应显示的字符总数。如果字段宽度大于输入数据的字符数,则默认情况下,输出文本会用空格填充。

示例

输出

>> res
res =
   'output without and with field width:  |3.033000e+02|  |   3.033000e+02|	|303.300000|  |   303.300000|'

标志

标志字段控制输出的其他格式。标志使用的字符主要描述间距、填充和文本对齐。

标志字符描述示例
减号 (-)左对齐输出%-5.2d
加号 (+)如果输出是文本,则右对齐输出;如果输出是数字,则添加前导加号。%+5.2d
%+5s
Space (空格)在输出前插入空格% 5.2f
零 (0)用零而不是空格填充输出%05.2f
井号 (#)井号标志是一个特殊情况,因为它与其他标志略有不同。它会修改选定的数字转换,如下所示:
  • 为 %o、%x 或 %X 运算符打印 0、0x 或 0X 前缀。
  • 即使 %f、%e 或 %E 运算符的精度为 0,也打印小数点。
  • 它不会为 %g 或 %G 运算符删除尾随零或小数点。
%#5.0f

示例:右对齐和左对齐

输出

>> ans

ans =

    'right-justify:|       flags|
     left-justify:|10.00       |'

示例:用空格和零填充

输出

>> b

b =

    'padding with space: |  20.00|
      padding with zero: |0000020.00|'

示例:井号

输出

>> a

a =

    '10.'

标识符

sprintf 等输出函数按照输入参数的顺序打印输出。因此,使用标识符以自定义指定的顺序生成输出。标识符是整数值,紧跟在 % 百分号之后,后跟 $ 美元符号。

默认顺序

示例

输出

>> t1

t1 =

    '1st 2nd 3rd'

使用标识符的自定义顺序

示例

输出

>> t2

t2 =

    '3rd 1st 2nd'

显示输出中的特殊字符

特殊字符用于特定的目的,因此不能用作普通文本。要使特殊字符成为输出文本的一部分,请使用特定的字符序列。

特殊字符字符序列
单引号''(两个单引号)
%%
反斜杠\\
警报\a
退格\b
换页\f
新行\n
回车\r
水平制表符\t
垂直制表符\v
十六进制数 N 的 Unicode 数值表示\xN
示例:sprintf('\x6A') 返回字符 'j'
八进制数 N 的 Unicode 数值表示\N
示例:sprintf('\100') 返回字符 '@'

设置字段宽度和精度的规则

格式化运算符遵循特定的规则来格式化输出文本。字段宽度和精度定义了数字在输出中的显示方式。让我们通过一个图示示例进行说明。

Formatting Text
  • 如果未指定精度,则默认值为六。
  • 如果精度 p 小于输入小数部分中的数字位数,则小数点后只显示 p 位数字,并且输出值将被四舍五入。
  • 如果精度 p 大于小数部分的位数,则小数部分会显示为 p 位数字,并在右侧添加零。
  • 如果未指定字段宽度 w,则默认值根据 p+1+n 计算,其中 n 是输入值整数部分的位数。
  • 如果字段宽度 w 大于 p+1+n,则输出的整数部分将用空格或零填充,填充的字符数计算为 w-(p+1+n)。

字段宽度和精度,格式说明符外部

要指定格式说明符外部的字段宽度和精度,请在格式化运算符的字段宽度或精度字段处使用星号 (*)。星号的位置应与输入参数中指定字段的数字位置匹配。让我们通过一个示例进行理解。

示例

输出

>> t3

t3 =

    ?123.456000 10.235  3.14?

以上示例的解释

格式化运算符描述
%*f将字段宽度指定为下一个输入参数,即 10。
%.*f将精度指定为下一个输入参数,即 3。
%*.*f将宽度和精度指定为下一个输入参数,即 4 和 2。

指定字段宽度和精度的标识符

我们可以为字段宽度和精度指定编号标识符,标识符的值来自输入参数。

Formatting Text

示例

输出

>>t4 =

    '123.456000  12.3659  3.14'

让我们来看一下上面的例子

格式化运算符描述
%1$*4$f1$ 指定第一个输入参数 123.456 作为值。
*4$ 指定第四个输入参数 10 作为字段宽度。
%2$.*5$f2$ 指定第二个输入参数 12.36587 作为值。
.*5$ 指定第五个输入参数 4 作为精度。
%3$*6$.*7$f3$ 指定第三个输入参数 3.145678 作为值。
*6$ 指定第六个输入参数 4 作为字段宽度。
.*7$ 指定第七个输入参数 2 作为精度。

下一个主题Calculus-in-matlab