格式化浮点值的spcifier - 点数是多少?

时间:2016-03-31 05:26:46

标签: c string-formatting

我知道这是一个非常基本的问题,但我仍然有一些困惑。

char *p = malloc(100);
sprintf (p,".. %03.1f .. \n", 2.5); 

结果:2.5

char *p = malloc(100);
sprintf (p,".. %05.1f .. \n", 2.5);

结果:002.5

所以,如果我说:

,我的理解是否正确
  • %05.1 - >总共代表5个占位符,其中.也被计算在内?

3 个答案:

答案 0 :(得分:1)

fprintf手册页显示'字段宽度。可选的十进制数字字符串(具有非零的第一个数字),指定最小字段宽度。 ......“。自'''在场上占有一席之地,应该计算在内。

答案 1 :(得分:0)

不,不! 0x.yf代表的内容是:小数点左边最多x个数字,而y最多代表左边的y个数字,它不计算{{1}虽然!

.对于整数说明符(d,i,o,u,x,X) - precision指定要写入的最小位数。如果要写入的值小于此数字,则结果将使用前导零填充。即使结果较长,也不会截断该值。精度为0表示没有为值0写入字符。对于e,E和f说明符 - 这是小数点后要打印的位数。对于g和G说明符 - 这是要打印的最大有效位数。对于s - 这是要打印的最大字符数。默认情况下,将打印所有字符,直到遇到结束的空字符。对于c型 - 它没有效果。如果未指定精度,则默认值为1.如果指定的句点没有显式的精度值,则假定为0.

请参阅此https://ideone.com/RAMYdj

答案 2 :(得分:0)

在格式字符串%05.1f中,总字段宽度将(至少)为5,小数点后将有一位数字,如果是,则字段将在左侧填零。短于5个没有填充的位置。请注意,如果数字需要超过5个位置,它将使用它们(例如,尝试打印1.2E37)。有关完整详细信息,请阅读printf()的POSIX规范等规范。

例如:

#include <stdio.h>

int main(void)
{
    double values[] =
    {
        0, 0.1, -1.0, 3.1415, -99.9, -123.4, -2345.6,
        88.8, 777.77, 9876.54, -1000000.2, 222333444.555,
    };
    enum { NUM_VALUES = sizeof(values)/sizeof(values[0]) };

    for (int i = 0; i < NUM_VALUES; i++)
        printf("%16.5f  =  %05.1f\n", values[i], values[i]);

    return 0;
}

示例输出:

         0.00000  =  000.0
         0.10000  =  000.1
        -1.00000  =  -01.0
         3.14150  =  003.1
       -99.90000  =  -99.9
      -123.40000  =  -123.4
     -2345.60000  =  -2345.6
        88.80000  =  088.8
       777.77000  =  777.8
      9876.54000  =  9876.5
  -1000000.20000  =  -1000000.2
 222333444.55500  =  222333444.6
相关问题