使用sprintf格式化浮动失败

Formatting float with sprintf fails

本文关键字:失败 格式化 sprintf 使用      更新时间:2023-10-16

我试图在c++中使用sprintf创建一个格式化的字符串(实际上是一个字符数组)。输入变量是一个浮点值float fps,一个未单数整数unsinged int timeStepCount和写入char out[256]的缓冲区。我像这样调用sprintf:

sprintf(out, "%4.1f FPS %10d time steps", fps, timeStepCount);

timeStepCount被正确格式化(当数字短于10位时添加空格),但fps没有。它只能得到实际需要的数字。我忘了什么吗?我用的是Visual Studio 2008,如果有帮助的话:)

格式%4.1f规定"打印fps时宽度至少为四个字符,小数点后有一位数字"。

您总是至少有一个数位在小数点前,小数点后,一个数位,这是至少三个请求的四个char s。如果fps的值在0(包含)到10(不包含)之间,则得到一个空格填充,否则没有。

如果您想要四个字符,包括小数点之前的填充,您需要%6.1f,因为两个位置用于点和后面的数字。