数值与字符串的相互转换
在 MATLAB 开发中,经常需要在数值计算结果与文本展示之间切换。无论是生成日志、导出配置还是界面显示,类型转换都是高频需求。下面结合实战场景梳理常用方法。
数值转字符串
使用 num2str 是最直接的方式,它能把数字序列变成字符数组。
整数转换
对于整型数据,直接调用即可,无需额外参数:
int1 = 10;
str_int = num2str(int1);
小数精度控制
浮点数转换时,默认可能会截断多余的小数位。若需精确控制,可传入格式参数:
dec1 = 1.23456;
% 保留 6 位有效数字
s1 = num2str(dec1, 6);
% 保留小数点后 6 位
s2 = num2str(dec1, '%.6f');
这里要注意,第二个参数如果是数字,代表有效数字;如果是格式化字符串,则按 printf 风格处理。
字符串转数值
反向操作使用 str2num。它内部会调用 eval 机制解析字符串,因此能处理较复杂的表达式,但也意味着输入需确保来源安全。
基础解析
字符串中的数字会被自动识别并转换为双精度浮点型:
str1 = '20';
val1 = str2num(str1);
str2 = '9.876';
val2 = str2num(str2);
关于精度,str2num 解析小数时通常保留至小数点后 4 位左右(具体取决于底层解析器的舍入规则),这在某些高精度场景下可能需要留意。
向量处理
如果字符串中包含多个数字,用空格分隔,str2num 也能将其还原为向量:
vec_str = '1.11 2.22 3.33';
vec_num = str2num(vec_str);
反之,数值向量转字符串时,也会以空格分隔的形式呈现:
vec_num = [1.11 2.22 3.33];
vec_str = num2str(vec_num);
注意事项
- 性能:
str2num涉及表达式求值,循环内频繁调用可能影响性能,建议批量处理。 - 替代方案:对精度要求极高或需要更严格格式控制时,可考虑配合
sprintf和sscanf使用。 - 空值:转换失败时返回空矩阵,实际工程中建议增加非空判断。


