1

我已经阅读并重新阅读了有关 matlab 中函数sprintf的帮助,但我不了解有关此函数的所有内容以及他们谈论的格式。

我在问自己函数格式背后的逻辑。

如果我运行示例

sprintf('%05d%s%02d%s%02d',546,'.',1,'.',3)

我明白了

00546.01.03

这是逻辑,因为第一个数字(546)写成一个整数和 5 位数字,第二个是一个字符,依此类推......但如果现在我试试这个

sprintf('%05d%s%02d%s%02d',546,'.',1,'.',3,4)

我明白了

00546.01.0300004

第一部分与上面相同......但它的最后一部分(00004)具有格式'%05d',对应于我在函数参数中输入的第一种格式。我的问题是第一种格式是否成为“默认”格式?

通过尝试这个

sprintf('%05d%s%02d%s%02d',546,'.',1,'.',3,4,56)

得到这个

00546.01.03000048

我认为答案是否定的……但是为什么呢?那么这些论点背后的逻辑是什么

谢谢你的帮助 !

4

1 回答 1

3

您提供sprintf的参数比%格式字符串中的 s 多。因此,sprintf从头开始重新使用格式字符串:

sprintf('%05d%s%02d%s%02d',546,'.',1,'.',3,4,56)

结果:

00546.01.03000048
         ^  
         starting fromat anew printing 00004 for %05d with 4   

最后的 '8' 字符是 56 打印为'%s'(如果你想检查它,'8' 的ascii 代码(字符)是 56!)

于 2013-07-10T10:52:40.020 回答