我们希望确保在将双精度值转换为字符串时最多保留10个小数点值。
当我们尝试%e或%f时,它将保留不超过5个小数点。
使用什么格式的字符串来为双精度值保留最多10个小数点?
发布于 2012-12-18 18:41:36
尝试使用%.17g以最适合所讨论的double的格式进行打印。
printf("%.17g\n", 10000.);
printf("%.17g\n", 240.0008);
printf("%.17g\n", 0.0000000013);
10000
240.0008
1.3000000000000001e-009发布于 2012-12-18 18:39:35
我希望您知道float类型(单精度浮点数)只保留六位小数精度?没有转换说明符可以提供从一开始就不存在的精度...( double类型保留大约15位的精度,仅供参考。)
链接:http://en.wikipedia.org/wiki/Floating_point#Internal_representation
更新: JasonD为您更新的问题提供了答案。为了后来居上而保持这一点。
发布于 2012-12-18 18:39:46
仅当小数较小时,Float才能存储此数字,否则使用double。
在本例中,%.17g和%.14f工作正常:
#include <stdio.h>
int main(void)
{
double v = 0.12345678912345;
printf("%.17g %.14f \n", v, v);
return 0;
}显示结果:
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这样的东西。例如:
#include <stdio.h>
int main(void)
{
long double v = 0.123456789123456789123456789;
printf("%.21Lg %.21Lf \n", v, v);
return 0;
}https://stackoverflow.com/questions/13931062
复制相似问题