数据以数组形式保存。当我们显示数据时, 它以数组的形式出现, 并且可能不像以前那样可表示。因此, MATLAB中提供了一些格式化操作符, 可用于将数据转换为文本并根据我们的要求格式化输出。
格式运算符控制输出的符号, 对齐方式, 有效数字。
我们可以在格式说明符中将格式运算符与普通文本和特殊字符结合使用。
格式化运算符可以与以下函数一起使用:compose, num2str, sprintf, fprintf, assert, error, warning和MException。
例:
>> % create a row vector using rand function
>> r = rand(1, 3);
>> % combining normal text, special character, formatting operator in the output
>> t = sprintf('Displaying 3 random numbers: \n 1)%f \n 2)%.2f \n 3)%12f', r);
输出
>> t
t =
'Displaying 3 random numbers:
1)0.957167
2)0.49
3)0.800280'
MATLAB中格式运算符的字段
%百分号始终引领格式运算符。格式运算符最多可以有六个字段-转换字符, 子类型, 精度, 字段宽度, 标志和数字标识符。
转换字符是所有六个字段中唯一需要的字段。
转换字符必须始终以%百分号开头。
并且在格式运算符的字段之间不允许有空格字符。
语法示例:
转换字符
转换字符是唯一必需的字段, 它指定输出的符号。转换字符由单个字母字符表示, 并出现在格式说明符的最后。
Sl。没有。
Conversion character
Description
1.
c
Single character
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)
例:
>>p=100;
>>ch = 'cdeEfgGosuxX';
>>res = sprintf("%c\t\t%c \n%c\t\t%d \n%c\t\t%e \n%c\t\t%E"+...
"\n%c\t\t%f \n%c\t\t%g \n%c\t\t%G \n%c\t\t%o"+...
"\n%c\t\t%s\n%c\t\t%u\n%c\t\t%x\n%c\t\t%X?, ...
ch(1), p, ch(2), p, +ch(3), p, ch(4), p, ch(5), p, ch(6), +...
p, ch(7), p, ch(8), p, ch(9), p, ch(10), p, ch(11), p, ch(12), p);
输出
>> res
res =
"cd
d100
e1.000000e+02
E1.000000E+02
f100.000000
g100
G100
o144
sd
u100
x64
X64"
亚型
子类型字段由紧接转换字符之前的单个字母字符表示。转换字符%o, %u, %x和%X将输入的数据视为整数, 而没有子类型字段。因此, 使用以下子类型说明符之一将数据输入视为浮点值, 并将其转换为八进制, 十进制或十六进制表示形式。
子类型说明符
Description
b
将输入数据视为双精度浮点值, 而不是无符号整数。
t
将输入数据视为单精度浮点值, 而不是无符号整数。
例:
>> p = 100;
>> res = sprintf('before using subtype:\t%u\nafter using subtype:\t%tu', p, p);
输出
>> res
res =
'before using subtype:100
after using subtype:1120403456'
精确
精度字段由紧跟在句点(点)之后的非负整数表示。它与%f, %e和%E运算符一起使用, 并指示要显示在小数点右边的位数。
例:
>> res = sprintf('output without and with precision field:\t%f\t%.2f\t%e\t%.2e', pi*30*ones(1, 4));
输出
>> res
res =
'output without and with precision field: 94.247780 94.25 9.424778e+01 9.42e+01'
场宽
字段宽度是一个非负整数, 带有或不带有小数点精度。由于精度字段指定了小数点后的位数, 因此字段宽度指定了应在输出中显示多少个总字符。如果字段宽度大于输入数据中的字符数, 则默认情况下, 在输出文本中填充空格字符。
例:
>> res = sprintf('output without and with field width:\t|%x|\t|%15x|\t|%f|\t|%15f|', 303.3*ones(1, 4));
输出
>> res
res =
'output without and with field width: |3.033000e+02| | 3.033000e+02||303.300000| | 303.300000|'
标志
标志字段控制输出的其他格式。用于标志的字符主要描述间距, 填充和文本对齐。
标志字符
Description
Example
减号(-)
左对齐输出
%-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
示例:-左右对齐:
>> sprintf('right-justify:|%+12s|\nleft-justify:|%-12.2f|', "flags", 10);
输出
>> ans
ans =
'right-justify:| flags|
left-justify:|10.00 |'
示例:-用空格和零填充:
>> b = sprintf('padding with space: |%10.2f|\n padding with zero: |%010.2f|', 20, 20);
输出
>> b
b =
'padding with space: | 20.00|
padding with zero: |0000020.00|'
示例:-磅符号:
>> a=sprintf('%#.0f', 10.00);
输出
>> a
a =
'10.'
身份标识
诸如sprintf之类的输出函数以与接受输入参数相同的顺序打印输出。因此, 使用标识符以自定义指定顺序生成输出。标识符是整数值, 紧跟在百分号之后, 后跟一个美元符号。
默认顺序
例:
>> t1 = sprintf('%s %s %s', '1st', '2nd', '3rd');
输出
>> t1
t1 =
'1st 2nd 3rd'
使用标识符的自定义订单
例:
>> t2 = sprintf('%3$s %1$s %2$s', '1st', '2nd', '3rd');
输出
>> t2
t2 =
'3rd 1st 2nd'
在输出中显示特殊字符
特殊字符用于特定目的, 因此不能用作普通文本。要将特殊字符作为输出文本的一部分, 请使用特定的字符序列。
特殊字符
Character sequence
单引号
”(单引号两次)
%%
Backslash
\\
Alarm
\a
Backspace
\b
Form feed
\f
新队
\n
Carriage return
\r
水平标签
\t
Vertical tab
\v
十六进制数字N的Unicode数值表示形式
\ xN示例:sprintf(‘\ x6A’)返回字符’j’
八进制数字Unicode数值的表示形式N
\ N示例:sprintf(‘\ 100′)返回字符’@’
设置字段宽度和精度的规则
格式运算符遵循特定的格式来格式化输出文本。字段宽度和精度定义了如何在输出中显示数字。让我们来看一个示例:
如果未指定precision, 则默认值设置为6。
如果精度p小于输入小数部分中的一位数字, 则小数点后仅显示p位数字, 并且输出值四舍五入。
如果精度p高于否。取小数部分的位数, 则显示小数部分, 在p位数的右边添加零。
如果未指定字段宽度w, 则根据p + 1 + n计算默认值, n是输入值整个部分的位数。
如果字段宽度w大于p + 1 + n, 则将输出的整个部分用空格或零个附加字符填充到左侧, 计算方式为w-(p + 1 + n)。
字段宽度和精度, 格式说明符之外
若要在格式说明符之外指定字段宽度和精度, 请使用星号(*)代替格式运算符的字段宽度或精度字段。星号的位置应与在输入参数中指定字段的数字的位置匹配。让我们看一个例子:
例:
>> t3 = sprintf('%*f %.*f %*.*f', 10, 123.456, 3, 10.2345, 4, 2, pi);
输出
>> t3
t3 =
?123.456000 10.235 3.14?
以上示例的说明:
Formatting Operator
Description
%*f
将字段宽度指定为以下输入参数10。
%.*f
将精度指定为下一个输入参数3。
%*.*f
将宽度和精度指定为下一个输入参数4和2。
指定标识符代替场宽和精度
我们可以为字段宽度和精度指定编号的标识符, 并且标识符的值来自输入参数。
例:
>> t4 = sprintf('%1$*4$f %2$.*5$f %3$*6$.*7$f', 123.456, 12.36587, 3.145678, 10, 4, 4, 2);
输出
>>t4 =
'123.456000 12.3659 3.14'
让我们来看一下上面的例子:
Formatting operator
Description
%1$*4$f
1 $指定第一个输入参数123.456, 因为值* 4 $指定第四个输入参数10作为字段宽度
%2 $。* 5 $ f
2 $指定第二个输入参数12.36587作为值。* 5 $指定第五个输入参数4作为精度
%3$*6$.*7$f
3 $指定第三个输入参数3.145678, 因为值* 6 $指定第六个输入参数4, 作为字段宽度。* 7 $指定第七个输入参数2作为精度