将语句的输出传递给Octave中的语句。为什么sprintf会修改数据?

时间:2016-06-03 08:48:54

标签: matlab printf octave

我想了解Octave的以下行为。

sprintf如何运作?

10位填充浮点数数字时:

$ ans = 2;
$ sprintf('%10.3f',ans)
ans =      2.000
$ sprintf('%10.3f',ans)
ans =     32.000    32.000    32.000    32.000    32.000    50.000    46.000    48.000    48.000    48.000

传递浮点时,精度为 3十进制数字:

$ ans = 2
ans =  2
$ sprintf('%0.3f',ans)
ans = 2.000
$ sprintf('%0.3f',ans)
ans = 50.00046.00048.00048.00048.000

传递整数时:

$ ans = 2
ans =  2
$ sprintf('%d',ans)
ans = 2
$ sprintf('%d',ans)
ans = 50

为什么传递给anssprintf的值会发生变化? 它不应该只是传递格式化的输出而不修改数据吗?

1 个答案:

答案 0 :(得分:1)

ans只是最近运行命令结果的占位符。这里的问题是sprintf返回字符串,而不是整数或浮点数。所以当你打电话时

$ sprintf('%d',ans)
ans = 2

ans实际上是'2' 50 sprintf的{​​{1}},您的下一个电话专门告诉50将输入视为整数,因此它输出$ sprintf('%d',ans) ans = 2 $ sprintf('%s',ans) % i.e. tell sprintf to expect a string (%s) and not an integer (%d) ans = 2 。试试这个:

$ ans = 2
ans =  2
$ sprintf('%0.3f',ans)
ans = 2.000
$ sprintf('%0.3f',ans)
ans = 50.00046.00048.00048.00048.000

所以考虑你问题中的另一个例子:

sprintf

现在,对sprintf('%0.3f','2.000')的第二次调用相当于2.000,如果将字符串[50, 46, 48, 48, 48]强制转换为整数,则会获得uint8('2.000')。您可以在命令行中键入 using (YonetimDBEntities YonetimDB = new YonetimDBEntities()) { var Sorgu = from c in YonetimDB.iletisim select new { c.id, c.FullName, c.Email, c.Subject, c.Date, c.Status }; // Status Value 1 or 0 myRepeaterName.DataSource = Sorgu.ToList(); myRepeaterName.DataBind(); } 来证明这一点。