1

matlab の関数sprintfに関するヘルプを読んで読み直しましたが、この関数とそれらが話している形式についてすべてを理解していません。

関数形式の背後にあるロジックを自問自答していました。

例を実行すると

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

私は得る

00546.01.03

最初の数字(546)は整数として5桁で書かれているので、これは論理的です.2番目は文字です...

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

フォーマット文字列の ssprintfよりも多くの引数を指定しています。%したがって、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 に答える