我有一个ascii“ 15605632.68128593”,我希望转换
在不失去准确性的情况下达到了两倍-
so
double d;
d=(double)atof("15605632.68128593");
printf("%f",d);
printed result is 15605632.681286
有任何想法吗 ?
谢谢 - !
最佳答案
您可能没有得到所有尾随的小数位。尝试printf("%.8f", d)
。
您也可以尝试使用sscanf("15605632.68128593", "%lf", &d)
代替atof
调用。
也不必将atof
的结果强制转换为double
。已经是两倍了。但是演员阵容没有任何伤害。
请注意-至少在大约6年前,当我详细查看此内容时-许多printf
和scanf
实现都是错误的,因为它们的功能不像您想象的那样。 Visual C / C ++和gcc在其本机实现中均存在问题。 This paper是有用的参考。
Cygwin和gcc 4.3.4:
#include <stdio.h>
int main(void)
{
double x;
sscanf("15605632.68128593", "%lf", &x);
printf("%.8f\n", x);
return 0;
}
然后:
# gcc foo.c
# ./a
15605632.68128593