说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

高分求救:vc2005 中 atof() 函数的问题,如果想要分,可以提出来,在加分,我只能加100

编辑:说三道四文库 发布时间:2018-05-26 06:43
HTML文档下载 WORD文档下载 PDF文档下载
我根据书本内容写了一个解析公式的类,其中用到了一个函数 atof()函数,用于将字符串的数值转换成真正的double型的数值。
但在真正的转换时,atof()的精度总是在变化,

   char s[80] = "2.033";
   double ld;
   ld = atof(s);
   结果ld=2.0399999999...
如果s=2.036则ld=2.036000...001,这样的结果无法满足我的需求,不知道是为什么,还请坛上高手指教。
星期一交差,这是一定要完成的,如果实在是VC2005的问题,如果用其它方法转换,牺牲速度也行。
如果数字不复杂,就自己转换,比如:
2.036 = 2*1 + 0*1/10 + 3*1/100 + 6*1/1000 ...
关键就是取小数点的位置,其它只是简单的运算。
函数应该没有问题,机器在转换精度的时候发生了丢失。可以考试使用函数sprintf
有些数字,比如0.3,虽然看起来很小,很简单,但无论你是用float,还是double,甚至是long double,都是无法精确表示的,这取决于计算机的浮点数表示法。

参考:http://dev.csdn.net/develop/article/28/28201.shtm
二楼的可行啊,使用格式控制符,就可以可以控制输出的位数。
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘