首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

printf的一个小技巧

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

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

int precision = 3;

float position = 1.231236;

printf("%.*f\n", precision, position);

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

float position = 1.231236;

printf("%.3f\n", position);

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

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

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

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

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

/* 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 

prec = -1;

++f;

}

else if (isdigit(*f))

{

prec = 0;

while (*f != '\0' && isdigit(*f))

{

prec *= 10;

prec += *f++ - '0';

}

}

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200620A0P20U00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券