Matlab中sprintf函数使用

目录

说明

示例

浮点格式

字面文本和数组输入

将格式化文本指定为字符串数组

带有浮点输入的整数格式

指定输出值的字段宽度

使用位置标识符 (n$) 对输入重新排序

根据元胞数组中的值创建字符向量


        sprintf函数将数据格式化为字符串字符向量

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

[str,errmsg] = sprintf(formatSpec,A1,...,An)

str = sprintf(litera1Text)

说明

  • str = sprintf(formatSpec,A1,...,An) 使用 formatSpec 指定的格式化操作符格式化数组 A1,...,An 中的数据,并在 str 中返回结果文本。sprintf 函数按列顺序格式化 A1,...,An 中的值。如果 formatSpec 是字符串,则输出 str 也是字符串。否则,str 是字符向量。
  • 要以字符串数组或字符向量元胞数组形式返回多个格式化文本段,请使用compose函数。
  • 如果操作失败,[str,errmsg] = sprintf(formatSpec,A1,...,An) 将以字符向量形式返回一条错误消息。否则,errmsg为空。
  • str = sprintf(litera1Text)转换 literalText 中的转义字符序列,例如 \n 和 \t。它会原样返回所有其他字符。如果 literalText 包含格式化操作符(例如 %f),则 str 将丢弃该字符以及之后的所有字符。

示例

浮点格式

        使用 %e、%f 和 %g 设定符设置浮点数的格式

A = 1/eps;
str_e = sprintf('%0.5e',A)
str_e = 
'4.50360e+15'

str_f = sprintf('%0.5f',A)
str_f = 
'4503599627370496.00000'

str_g = sprintf('%0.5g',A)
str_g = 
'4.5036e+15'

字面文本和数组输入

        将字面文本与数组值组合在一起来创建字符向量。

formatSpec = 'The array is %dx%d.';
A1 = 2;
A2 = 3;
str = sprintf(formatSpec,A1,A2)
str = 
'The array is 2x3.'

将格式化文本指定为字符串数组

        要以字符串形式返回格式化文本,请在调用 sprintf 函数时将 formatSpec 指定为字符串而不是字符向量。从 R2017a 开始,可以使用双引号创建字符串。转换数据并以字符串的形式返回结果。

formatSpec = "The current time is: %d:%d %s";
A1 = 11;
A2 = 20;
A3 = 'a.m.';
str = sprintf(formatSpec,A1,A2,A3)

str = 
"The current time is: 11:20 a.m."

        转换输入字符串。包含文本的输入数组可以是字符向量或字符串。

A1 = 2;
A2 = 35;
A3 = "p.m.";
str = sprintf(formatSpec,A1,A2,A3)

str = 
"The current time is: 2:35 p.m."

带有浮点输入的整数格式

        将双精度值显式转换为整数。

str = sprintf('%d',round(pi))
str = 
'3'

指定输出值的字段宽度

        指定输出值的最小宽度。

str = sprintf('%025d',[123456])
str = 
'0000000000000000000123456'

        %025d 格式设定符中的 0 标志请求在输出中使用前导零。

使用位置标识符 (n$) 对输入重新排序

        使用 n$ 位置标识符将输入值重新排序。

A1 = 'X';
A2 = 'Y';
A3 = 'Z';
formatSpec = ' %3$s %2$s %1$s';
str = sprintf(formatSpec,A1,A2,A3)
str = 
' Z Y X'

根据元胞数组中的值创建字符向量

C = { 1,   2,   3 ;
     'AA','BB','CC'};

str = sprintf(' %d %s',C{:})
str = 
' 1 AA 2 BB 3 CC'

        语法 C{:} 创建一个逗号分隔的数组列表,该列表以列顺序包含 C 中每个元胞的内容。例如,C{1}==1 和 C{2}=='AA'。

        输出字段的格式,使用格式化操作符指定。formatSpec还可以包括普通文本和特殊字符。

        formatSpec可以是用单引号引起来的字符向量,从R2016b开始,也可以是字符串标量。 

转换字符

        此表显示了要将数值和字符数据格式化为文本的转换字符。

值类型转换详细信息

有符号整数

%d 或 %i

以 10 为基数

无符号整数

%u

以 10 为基数

%o

以 8 为基数(八进制)

%x

以 16 为基数(十六进制),小写字母 af

%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 代表函数调用中其他输入参数的位置。

注意:

        如果输入参数为数组,则不能使用标识符指定该输入参数中的特定数组元素。

标志

'–'

左对齐。
示例:%-5.2f
示例:%-10s

'+'

始终为任何数值输出符号字符(+ 或 –)。
示例:%+5.2f
右对齐文本。
示例:%+10s

' '

在值之前插入空格。
示例:% 5.2f

'0'

在值之前补零以填充字段宽度。
例如:%05.2f

'#'

修改选定的数值转换:

  • 对于 %o、%x 或 %X,将输出 0、0x 或 0X 前缀。

  • 对于 %f、%e 或 %E,即使精度为零也将输出小数点。

  • 对于 %g 或 %G,不删除尾随零或小数点。

示例:%#5.0f

字段宽度

        要输出的最低字符数。字段宽度操作符可以是数字,也可以是指向输入参数的星号 {*)。

        当将*指定为字段宽度操作符时,其他输入参数必须指定打印宽度和要打印的值。宽度和值可以是参数对组,也可以是数值数组中的对组。使用 *作为字段宽度操作符时,可以打印具有不同宽度的不同值。

        除非标志另行指定,否则该函数使用空格填充值之前的字段宽度。

精度

对于 %f、%e 或 %E

小数点右侧的位数
示例:'%.4f' 将 pi 输出为 '3.1416'

对于 %g 或 %G

有效位数
示例:'%.4g' 将 pi 输出为 '3.142'

        精度操作符可以是数字,也可以是指向参数的星号 (*)。

        当将 * 指定为字段精度操作符时,其他输入参数必须指定打印精度和要打印的值。精度和值可以是参数对组,也可以是数值数组中的对组。使用 * 作为精度操作符时,您可以打印具有不同精度的不同值。

        将 *.* 指定为字段宽度和精度操作符时,必须以三元组形式指定字段宽度、精度和值。

子类型

        可以使用子类型操作符将浮点值显示为八进制、十进制或十六进制值。子类型操作符紧邻转换字符之前。此表显示了可使用子类型的转换。

输入值类型

子类型和转换字符

输出值类型

浮点数

%bx 或 %bX
%bo
%bu

双精度十六进制、八进制或十进制值
例如:%bx 将 pi 输出为 400921fb54442d18

%tx 或 %tX
%to
%tu

单精度十六进制、八进制或十进制值
例如:%tx 将 pi 输出为 40490fdb

格式化操作符前或后的文本

        formatSpec还可以在百分号 % 前添加其他文本,或者在转换字符后添加其他文本。文本可以为:

  • 要打印的普通文本。

  • 无法作为普通文本输入的特殊字符。此表显示了如何在formatSpec中表示特殊字符。

    特殊字符

    表示形式

    单引号

    ''

    百分比字符

    %%

    反斜杠

    \\

    警报

    \a

    退格符

    \b

    换页符

    \f

    换行符

    \n

    回车符

    \r

    水平制表符

    \t

    垂直制表符

    \v

    其 Unicode® 数值可以通过十六进制数 N 表示的字符

    \xN

    示例:sprintf('\x5A') 返回 'Z'

    其 Unicode 数值可以通过八进制数 N 表示的字符

    \N

    示例:sprintf('\132') 返回 'Z'

        使用格式化操作符进行转换时要注意的行为

  • 数值转换仅输出复数的实部。

  • 如果指定不适合数据的转换(例如数值的文本转换),MATLAB® 将改写指定的转换并使用 %e。

  • 如果对整数值应用文本转换(%c 或 %s),MATLAB 会将对应于有效字符代码的值转换为字符。

提示

  • sprintf函数类似于fprintf,但fprintf 输出到文件或输出到命令行窗口。

  • 读取函数 sscanf 和 fscanf 的格式设定符不同于写入函数 sprintf 和 fprintf 的格式。读取函数不支持精度字段。宽度字段在写入函数中指定最小值,但在读取函数中指定最大值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值