我想了解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
为什么传递给ans
时sprintf
的值会发生变化?
它不应该只是传递格式化的输出而不修改数据吗?
答案 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();
}
来证明这一点。