首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >printf去掉尾部0

printf去掉尾部0
EN

Stack Overflow用户
提问于 2015-10-29 15:32:57
回答 3查看 155关注 0票数 0

我有两个双数字的ab

代码语言:javascript
复制
double a = 1.01, b = 1.2345678

然后printf("%.4f %.4f", a, b)将输出

代码语言:javascript
复制
1.0100  1.2345

但是我想输出

代码语言:javascript
复制
1.01 1.2345

也就是说,删除无用的0。

EN

回答 3

Stack Overflow用户

发布于 2015-10-29 15:36:29

%.4f将始终通过填充零来打印最多4个小数。您可以删除%.4f并使用%g打印不带填充零的精确值

g,G双参数转换为样式f或e(对于G转换,则为F或E)。精度指定有效位数。如果缺少精度,则提供6位数字;如果精度为零,则将其视为1。如果转换得到的指数小于-4或大于或等于精度,则使用样式e。从结果的小数部分中删除尾随零;只有在小数点后面至少跟一个数字时才会出现小数点。

票数 2
EN

Stack Overflow用户

发布于 2015-10-29 15:36:43

这不是您想要的,但您可以使用%g而不是%f,如下所示:

代码语言:javascript
复制
  double a = 1.01, b = 1.2345678;
  printf("%.4g %.4g\n", a, b);

精度值在"g“格式中的解释与在"f”格式中的不同。"f“的精度指定小数点后的位数。"g“的精度指定打印的最大有效位数。

票数 2
EN

Stack Overflow用户

发布于 2015-10-29 15:36:54

如果指定宽度...然后你就会得到那个宽度。

只需使用"%g“或"%f”即可。

从"man“页面:

http://linux.die.net/man/3/printf

g,G

double参数转换为样式f或e(对于G转换,则为F或E)。精度指定有效位数。如果缺少精度,则提供6位数字;如果精度为零,则将其视为1。如果转换得到的指数小于-4或大于或等于精度,则使用样式e。从结果的小数部分中删除尾随零;只有在小数点后面至少跟一个数字时才会出现小数点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33408316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档