2012-12-18 56 views
3

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

当我们尝试%e或%f时,它不会保留5个以上的小数点。 当我们尝试%.14f时,小值(小于1.0e-20)未正确转换为字符串。

什么格式字符串用于保持双精度值的10位小数点?

+0

您是否试过'%.10g'? –

+0

http://stackoverflow.com/questions/7228438/convert-double-float-to-string,可以对你有用。 –

回答

5

尝试%.17g以双倍问题的最适当格式打印。

printf("%.17g\n", 10000.); 
printf("%.17g\n", 240.0008); 
printf("%.17g\n", 0.0000000013); 

10000 
240.0008 
1.3000000000000001e-009 
2

我希望你做知道float型(单精度浮点),只有永远保持精密六个小数位数?没有转换符可以给精密称不存在开始与...

连接(double型保持约15位精度,仅供参考。):http://en.wikipedia.org/wiki/Floating_point#Internal_representation

更新: JasonD有答案到您更新的问题。保持这种后天性。

+0

我正在寻找双值转换。更新后的帖子 – Maanu

1

只有数字很小时,浮点数才能存储此小数点,否则使用double。

#include <stdio.h> 

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

显示的结果::

在这个例子中%.17g%.14f被毫无问题的工作

0.12345678912345 0.12345678912345 

从文档

˚F:十进制浮点,小写392.65

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

:使用最短表示:%e或%F 392.65

因此,使用%.14f它是罚款

编辑:

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

要显示超过20小数点,你应该使用长双......但是如果你只需要存储1.0E-20,不需要打印超过6小数,浮点数可以拿着它。

对于长时间双倍,您需要使用类似%.21Lg。例如:

#include <stdio.h> 

int main(void) 
{ 
     long double v = 0.123456789123456789123456789; 
     printf("%.21Lg %.21Lf \n", v, v); 
     return 0; 
} 
+0

不,你不需要“长双”来保存/显示1.0e-20。即使是一个简单的'float'也可以保持小至1.0e-37('FLT_MIN')的值... – DevSolar

+0

的确,如果值很小,一个简单的浮点数就可以保存它...我将修复它 – benjarobin