首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么printf("%.6g,<value>)忽略小数点后的零?

为什么printf("%.6g,<value>)忽略小数点后的零?
EN

Stack Overflow用户
提问于 2012-05-20 15:30:05
回答 2查看 7K关注 0票数 4

我想在小数点后打印最多6位数字,所以我使用了以下命令:

代码语言:javascript
复制
printf("%.6g",0.127943989);

printf的输出是0.127944,这是正确的,但当我尝试这样做时:

代码语言:javascript
复制
printf("%.6g",0.007943989);

输出变成了0.00794399,这不是我想要看到的!

似乎printf忽略了小数点后的零。那么我如何强制它输出最大的6位精度呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-20 15:41:27

"%f"格式说明符:

代码语言:javascript
复制
printf("%.6f\n",0.007943989)  // prints 0.007944

你在找什么?请记住,如果数字允许,这不会自动切换到%e格式样式,因此这可能也不是您想要的。

例如,以下内容:

代码语言:javascript
复制
printf("%.6g\n",0.00007943989);
printf("%.6f\n",0.00007943989);

打印:

代码语言:javascript
复制
7.94399e-005
0.000079

目前还不清楚你是否想要"%g"提供的较小数字的指数形式。

请注意,对于如何处理精度规范,%f%g的规范的行为略有不同。

用于%f的精度:“小数点字符后的位数等于

  • %f %g:"with precision指定有效位数”

并且小数点后的零不计入有效数字(这解释了您在%g中看到的行为)。

票数 5
EN

Stack Overflow用户

发布于 2012-05-20 15:51:53

ISO C标准要求

一个可选精度,以句点('.')的形式表示后跟一个可选的十进制数字字符串...这给了..。gG转换的最大有效位数

下面是使用GNU libc会得到的输出(GCC 4.5.1,libc 2.11;GCC 4.6.3,libc 2.15)

代码语言:javascript
复制
printf("%.6g\n", 0.12);
0.12
printf("%.6g\n", 0.1234567890);
0.123457
printf("%.6g\n", 0.001234567890);
0.00123457
printf("%#.6g\n", 0.001234567890);
0.00123457
printf("%.6g\n", 0.00001234567890);
1.23457e-05
printf("%#.6g\n", 0.00001234567890);
1.23457e-05

printf("%.6f\n", 0.12);
0.120000
printf("%.6f\n", 0.1234567890);
0.123457
printf("%.6f\n", 0.001234567890);
0.001235
printf("%#.6f\n", 0.001234567890);
0.001235
printf("%.6f\n", 0.001234567890);
0.000012
printf("%#.6f\n", 0.001234567890);
0.000012
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10671600

复制
相关文章

相似问题

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