帮我看看atof()

Microsues 2011-09-09 04:58:43
#include<iostream>
using namespace std;

double my_atof(const char* s)
{
bool dot = true;
double result = 0;
int sign = 1;
int i = 0;
double temp = 1;
for( ; isspace(s[i]) ;++i);
sign = (s[i] == '-') ? -1 : 1;

if(s[i] == '+' || s[i] == '-')
++i;

for( ; isdigit(s[i]) || s[i] == '.'; ++i){
if(s[i] == '.'){
dot = false;
++i;
}
if(dot == true){
result = result * 10 + (s[i] - '0');
}
else{
temp = temp * 10;
result = result + (s[i] - '0')/temp;
}
}

return sign * result;
}


int main()
{
cout<<my_atof(" 33990.09822")<<endl;
return 0;
}


打印33990.1
怎么改进 输出33990.09822?
...全文
58 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-09-09
  • 打赏
  • 举报
回复
摒弃cout;使用printf!
#include <stdio.h>
//...
printf("%lg\n",my_atof(" 33990.09822"));

healer_kx 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 babilife 的回复:]

忘了说记得加#include<iomanip>
[/Quote]
+1
至善者善之敌 2011-09-09
  • 打赏
  • 举报
回复
忘了说记得加#include<iomanip>
至善者善之敌 2011-09-09
  • 打赏
  • 举报
回复

int main()
{
cout<<setiosflags(ios::fixed)<<setiosflags(ios::showpoint)<<setprecision(5);//小数点后面的个数
cout<< setw(8)<<my_atof("33990.09822")<<endl;
return 0;
//cout<<setiosflags()
}
healer_kx 2011-09-09
  • 打赏
  • 举报
回复
挺好的。

64,687

社区成员

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

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