前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >printf的一个小技巧

printf的一个小技巧

作者头像
Qt君
发布2020-06-24 15:14:35
2920
发布2020-06-24 15:14:35
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

每天例行代码review看到的一个小技巧,分享给大家。

  代码效果是这样的,通过改变参数变量控制浮点数的打印精度。代码如下:

代码语言:javascript
复制
int precision = 3;
float position = 1.231236;
printf("%.*f\n", precision, position);

  通过改变precisition的精度值可以控制position的打印精度。等价于下列代码:

代码语言:javascript
复制
float position = 1.231236;
printf("%.3f\n", position);

用变量控制浮点数精度打印范围,极大提高代码的灵活性。

  问了下同事,这里为什么这样做的?得到的答案有些无语,说是在其他地方看到有这样写就拿来用了。虽然可以这样用,还是要找出使用的根据。

  在http://www.cplusplus.com/reference/cstdio/printf/找到了以下信息:

.*精度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数指定的。

  另外还找了glibc的printf的对应部分实现源码:

代码语言:javascript
复制
/* Get the precision.  */
/* -1 means none given; 0 means explicit 0.  */
prec = -1;
if (*f == '.')
{
    ++f;
    if (*f == '*')
    {
        /* The precision is given in an argument.  */
        nextarg(prec, int);
        /* Avoid idiocy.  */
        if (prec < 0)
            prec = -1;
        ++f;
    }
    else if (isdigit(*f))
    {
        prec = 0;
        while (*f != '\0' && isdigit(*f))
        {
            prec *= 10;
            prec += *f++ - '0';
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档