将char *转换为double,而不会失去c

时间:2016-02-19 16:56:06

标签: c char strtod

我需要一些帮助。我必须转换并将char *存储为double或long double 而不会丢失精度。

确实,我尝试使用 strtold atof 方法(也是 strtold ),但这些方法正在舍入值。

例如:

char * key  ="39.7519707";

double ld =strtod((char*)key,NULL);

printf("%lf", ld);

打印:39.751971

但是printf("%6.7f",ld)给了我正确的价值,但我无法存储到变量中。

1 个答案:

答案 0 :(得分:1)

首先,您只需要%f格式说明符即可打印double

然后,您使用strtod()并没有失去精确度,输出表示是您使用printf()格式%f时的问题说明符。

根据C11,章节§7.21.6.1, fprintf()

  

[...]如果   缺少精度,它被视为6; [...]

接下来,当你做了

printf("%6.7f",ld);

精度变为7并输出您希望看到的值。