我需要一些帮助。我必须转换并将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)
给了我正确的价值,但我无法存储到变量中。
答案 0 :(得分:1)
首先,您只需要%f
格式说明符即可打印double
。
然后,您使用strtod()
并没有失去精确度,输出表示是您使用printf()
格式%f
时的问题说明符。
根据C11
,章节§7.21.6.1, fprintf()
[...]如果 缺少精度,它被视为6; [...]
接下来,当你做了
printf("%6.7f",ld);
精度变为7并输出您希望看到的值。