我有一个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年前,当我详细查看此内容时-许多printfscanf实现都是错误的,因为它们的功能不像您想象的那样。 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

10-08 04:12