首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双10小数点精度

问双10小数点精度
EN

Stack Overflow用户
提问于 2012-12-18 18:35:48
回答 3查看 4.9K关注 0票数 3

我们希望确保在将双精度值转换为字符串时最多保留10个小数点值。

当我们尝试%e或%f时,它将保留不超过5个小数点。

使用什么格式的字符串来为双精度值保留最多10个小数点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-18 18:41:36

尝试使用%.17g以最适合所讨论的double的格式进行打印。

代码语言:javascript
复制
printf("%.17g\n", 10000.);
printf("%.17g\n", 240.0008);
printf("%.17g\n", 0.0000000013);

10000
240.0008
1.3000000000000001e-009
票数 6
EN

Stack Overflow用户

发布于 2012-12-18 18:39:35

我希望您知道float类型(单精度浮点数)只保留六位小数精度?没有转换说明符可以提供从一开始就不存在的精度...( double类型保留大约15位的精度,仅供参考。)

链接:http://en.wikipedia.org/wiki/Floating_point#Internal_representation

更新: JasonD为您更新的问题提供了答案。为了后来居上而保持这一点。

票数 2
EN

Stack Overflow用户

发布于 2012-12-18 18:39:46

仅当小数较小时,Float才能存储此数字,否则使用double。

在本例中,%.17g和%.14f工作正常:

代码语言:javascript
复制
#include <stdio.h>

int main(void)
{
        double v = 0.12345678912345;
        printf("%.17g   %.14f  \n", v, v);
        return 0;
}

显示结果:

代码语言:javascript
复制
0.12345678912345   0.12345678912345

从文档中

f:十进制浮点,小写392.65

e:科学记数法(尾数/指数),小写3.9265e+2

g:使用最短的表示形式:%e或%f 392.65

所以使用%.14f就可以了

编辑:

小值(小于1.0e-20)未正确转换为字符串。

若要显示20个以上的小数,应使用long double...但是,如果您只需要存储1.0e-20,并且不需要打印超过6个小数,则float可以容纳它。

对于long double,你需要使用像%.21Lg这样的东西。例如:

代码语言:javascript
复制
#include <stdio.h>

int main(void)
{
        long double v = 0.123456789123456789123456789;
        printf("%.21Lg   %.21Lf   \n", v, v);
        return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13931062

复制
相关文章

相似问题

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