Chinaunix首页 | 论坛 | 博客
  • 博客访问: 789450
  • 博文数量: 130
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1339
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(130)

文章存档

2024年(1)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类: C/C++

2009-10-21 12:41:20

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

先看如下代码

#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
$


^_^.
阅读(1383) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~