MATLAB - 文本格式化



当您想要以特定格式显示文本时,文本格式化就发挥作用了。

Matlab 使用格式化运算符来管理符号、对齐方式、有效数字等。函数 num2str 和 sprintf 是最常用的方法,它们使用格式化运算符来处理文本格式化。

例如,格式化运算符如下:

%f 用于使用定点表示法将浮点值转换为文本。

%.2f 用于表示小数点后 2 位数字。

%12f 用于在输出中显示 12 个字符,包括填充和空格。

在 Matlab 中,支持格式化运算符的函数包括 compose、num2str、sprintf、fprintf。

格式化运算符字段

格式化运算符共有六个字段。以下是详细信息

formatting operator fields

格式化运算符的六个字段包括标识符、标志、字段宽度、精度、子类型和转换字符。在这六个字段中,转换字符是唯一必须与前面的 % 字符一起使用的参数。

转换字符

转换字符指示输出表示法。它采用单个字符,位于格式说明符的最后。

说明符 描述
c 单个字符 (char)
d 十进制表示法(带符号)
e 指数表示法(使用小写 e,例如 3.1415e+00)。
E 指数表示法(使用大写 E,例如 3.1415E+00)。
f 定点表示法。
g %e 或 %f 中较紧凑的一种。
G 与 %g 相同。
o 八进制表示法(无符号)。
s 字符向量或字符串数组。
u 十进制表示法(无符号)。
x 十六进制表示法小写 (a-f)
X 十六进制表示法大写 (A-F)

这是一个使用转换字符的示例,它将数字格式化为十六进制形式。

>> N = 30*ones(1,3);
text_format = sprintf('%X', N)

text_format =

    '1E1E1E'

>> 

要获得相同数字的十进制和定点格式,您可以如下所示在 sprintf 方法中使用 %d 和 %f。

>> N = 30*ones(1,3);
>> text_format = sprintf('%d %f', N)

text_format =

    '30 30.00000030 '

>> 

子类型

子类型是一个单个字母,它紧跟在转换字符之前。如果没有子类型,则 %o、%x、%X 和 %u 等转换说明符将输入数据视为整数。

因此,要将输入数据视为浮点数而不是整数,并将其转换为八进制、十进制或十六进制,您可以考虑以下子类型说明符

说明符 描述
b 对于双精度浮点值输入数据。
t 对于单精度浮点值输入数据。

示例

>> N = 15;
>> text_format = sprintf('%bu', N)

text_format =

    '04624633867356078080'

精度

此字段紧跟在格式化运算符中的句点之后。使用的数字为 0 或正整数。例如 %6.3f,这里的精度为 3。

示例

>> text_format = sprintf('%.2f', 1500)

text_format =

    '1500.00'

>> 

字段宽度

是格式化操作字段宽度中的正整数,它指示输出中的位数或字符数。例如 %5.2f,这里的字段宽度为 5。

默认情况下,如果字段宽度大于要显示的字符数,则会在左侧填充空格。

示例 1

>> text_format = sprintf('|%3e|%f|%5f|',[33333 45454 50.12123])

text_format =

    '|3.333300e+04|45454.000000|50.121230|'
>> 

示例 2

>> text_format = sprintf('%20s', 'Hello world')

text_format =

    'Hello world'

>> 

标志

此字段是可选的,但使用它可以为您的输出提供其他格式。下表描述了您在格式化过程中可以使用字符。

字符 描述 示例
减号 (-) 左对齐给定的输入 %-3.2d
加号 (+) 如果是数字,它将在数字输入数据前面显示符号 +/-。对于文本输入,它将右对齐。

%+3.2d

%+3s

空格 在给定的输入前插入空格 % 3.2f
零 (0) 在给定的输入前使用填充 %03.2f
井号 (#) 使用此特定数字输入可以更改:
  • 对于 %o、%x 或 %X,打印 0、0x 或 0X 前缀。
  • 对于 %f、%e 或 %E,即使精度为 0,也要打印小数点。
  • 对于 %g 或 %G,不要删除尾随零或小数点。
%#3.0f

示例 1:使用减号 (-)

>> txt_format = sprintf('Example of left-justify: %-12.2f',11.3)

txt_format =

    'Example of left-justify: 11.30       '

>>

示例 2:使用加号 (+)

>> text_format = sprintf('plus sign: %+5.2f',12.3)

text_format =

    'plus sign: +12.30'

>> 

示例 3:使用空格进行填充

>> mytxt = sprintf('Padding with zeroes: %010.2f',5.2)

mytxt =

    'Padding with zeroes: 0000005.20'

>> 

示例 4:使用零 (0) 进行填充

>> mytxt = sprintf('Padding with zeroes: %010.2f',5.2)

mytxt =

    'Padding with zeroes: 0000005.20'

>> 

标识符

标识符是指给代码中的变量、函数或其他元素指定的名称。在文本格式化方面,标识符可用于指定应在格式化字符串中插入值的位 置。

要在 MATLAB 中的文本格式化中包含标识符,您可以使用 % 字符后跟一个数字(或可选名称),该数字指定输入参数列表中相应参数的位置。

示例

>> a = 'My age is: ';
b = 25;

mystr = sprintf('%s %d', a, b)

mystr =

    'My age is:  25'

>> 

使用 compose() 方法进行文本格式化

MATLAB 中的 compose() 函数将其第一个参数作为格式说明符字符串,并将一个或多个值或变量作为后续参数。它通过用提供的值替换格式说明符中的占位符来返回格式化字符串。

示例

a = 'My age is: ';
b = 25;

mystr = compose('%s %d', a, b)

在 matlab 中执行后,输出为

>> a = 'My age is: ';
b = 25;

mystr = compose('%s %d', a, b)

mystr =

  1×1 cell array

    {'My age is:  25'}

>> 

使用 num2str() 方法进行文本格式化

MATLAB 中的 num2str() 函数用于将数值转换为其对应的字符串表示形式。它接受一个或多个数值输入值,并返回这些值的字符串表示形式。

num2str 的基本语法为:

str = num2str(value, format)
  • 表示您要转换为字符串的数值或数组。
  • 格式(可选)指定结果字符串的格式。它可以是格式说明符,例如整数的 '%d' 或浮点数的 '%0.2f' 等。

示例

pi_value = 3.14159;
str = num2str(pi_value, '%0.3f')

在 matlab 中执行后,您将获得

>> pi_value = 3.14159;
str = num2str(pi_value, '%0.3f')

str = 3.142

>> 

使用 fprintf() 方法进行文本格式化

MATLAB 中的 fprintf() 函数用于将格式化数据写入文件或命令窗口。它允许您以灵活且组织有序的方式组合文本和数据。

fprintf() 的基本语法为:

fprintf(format, A1…AN)
  • 格式是一个字符串,指定输出的格式。它由静态文本和格式说明符组成,例如 %s、%d、%f 或 %e,这些说明符表示A中相应数据的占位符。
  • A1..AN是要写入的数据,可以是标量、向量、矩阵或元胞数组。

示例

a = 'My age is: ';
b = 25;

fprintf('%s %d', a, b)

在 matlab 中执行后,您将获得

>> a = 'My age is: ';
b = 25;

fprintf('%s %d', a, b)

My age is:  25
>> 
广告