在使用matlab时,想要在命令行窗口输出一些数据方便观看。所以使用了matlab自带的输出命令fprintf。fprintf命令提供了数据对齐功能,在这里参考AI给出的使用方法。在输出数据时加入’%10s'即可输出占据10个位置的字符。
下图是参照AI的测试结果。发现对齐效果良好,可以把不同长度的数据进行左对齐,界面美观。
但在下面实际应用中却遇到了问题。可以看到如下实例。程序如下
fprintf('%-15s %-15d % -15s\n', '01ABC第一列数据', 123456,'02DE第二列数据');
fprintf('%-15s %-15d % -15s\n', '01ABdef第一列', 1234,'02DE第二列');
fprintf('\n');
fprintf('%-15s %-15d % -15s\n', '01ABC第一列数据', length('01ABC第一列数据'),'02DE第二列数据');
fprintf('%-15s %-15d % -15s\n', '01ABdef第一列', length('01ABdef第一列'),'02DE第二列');
测试结果如下
>> test
01ABC第一列数据 123456 02DE第二列数据
01ABdef第一列 1234 02DE第二列
01ABC第一列数据 10 02DE第二列数据
01ABdef第一列 10 02DE第二列
>>
发现两组数据没有对齐。第二组测试了第一列数据的宽度,发现宽度都是10,但看起来第一行数据要宽很多,在这里一直怀疑fprintf的使用方法有错误。
通过仔细观察发现,根本原因并不在于函数的使用方法,根本原因在于汉字和字母或数字的混用。一个汉字的视觉效果几乎相当于两个字母或数字,因此带来了没有对齐的视觉效果。
解决办法:将汉字换成英文,实际测试效果非常好。效果如下:
也可以将汉字放在窗口的后面,可以看到,第三列有汉字,但是视觉效果也是对齐的。
另外要注意,设置的字符宽度一定要大于实际字符宽度(英文字母很占字符数量),否则也不会对齐的。