关于C语言中数据精度问题

2014-11-23 21:26:54 · 作者: · 浏览: 25

  在软件开发中我们经常遇到数据精度处理问题。


  先看如下代码


  #include #include #include


  int main ( void )


  {


  char *s="0.100001200";


  fprintf ( stderr, "%f\n",atof(s));


  return 0;


  }


  以上代码编译后执行,结果如下:


  $ 0.100001


  $


  问题出在哪里,是 atof 函数的问题? 将 atof(s) 替换成 strtod(s,NULL) 后,结果依然如此。


  经过测试,发现并非是 atof 或 strtod 函数转换时精度丢失,而是 %f 的格式化输出符默认的输出为小数点后面 6 位的精度。


  我们将上面的代码修改为:


  #include #include #include


  int main ( void )


  {


  char *s="0.100001200";


  fprintf ( stderr, "%18.10f\n",atof(s));


  return 0;


  }


  编译后执行,结果如下


  $ 0.100001200


  $