字符串转double的问题,atof精度有损失,最好给封装个函数,谢谢了!

badbombaby 2008-11-28 09:59:32
我在VC下编了个程序,如下:
#include <stdlib.h>
#include <iostream.h>

void main()
{
char ch[20]="123456789.987654321";
double t=atof(ch);
cout<<t<<endl;

}
输出是1.23457e+008,而不是123456789.987654321,
1.这是不是错误呢?
2.我想要输出的结果是123456789.987654321,怎么样才能实现呢?
3.谁能帮我封装个函数实现这个功能呢?
...全文
1741 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
badbombaby 2008-11-30
  • 打赏
  • 举报
回复
谢谢楼上的解答,明白了
lc19890326 2008-11-28
  • 打赏
  • 举报
回复
1.这是不是错误呢?
--------
当然不是错误,计算机对浮点数的处理包括指数和尾数,精度是有限的,不可能无限的高下去
一般用cout输出可以设定精度以及要求是否用科学计数法表示,如我上面的setprecision(9)设定小数点后9位,fixed小数形式输出

但你数字太大 小数太多,long double都存储不下的时候只有截断精度了
lc19890326 2008-11-28
  • 打赏
  • 举报
回复

#include <cstdlib>
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;

int main()
{
char ch[20]="123456789.987654321";
long double d;
istringstream is(ch);
is>>d;
cout<<setprecision(9)<<fixed<<d<<endl;
return 0;
}

暂时只能输出123456789.987654330

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧