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

来源:网络时间:2011-06-24 15:03:09

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

  先看如下代码

  #include <stdio.h> #include <stdlib.h> #include <string.h>

  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 <stdio.h> #include <stdlib.h> #include <string.h>

  int main ( void )

  {

  char *s="0.100001200";

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

  return 0;

  }

  编译后执行,结果如下

  $ 0.100001200

  $

文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系我们删除。(本站为非盈利性质网站) 联系邮箱:rjfawu@163.com