如何将double转换成int?

Sco_field 2006-11-03 10:28:35
比如double数据: 2.370420e+2 ,-2.470420e-5,...如何转变成 int数据 2370420 ,
-2470420,...呢?

要求是不要过多的使用while 或if等过多占用时间的语句.

谢谢
...全文
3469 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kvci 2006-11-03
  • 打赏
  • 举报
回复
sscanf( str_double, "%[^.]", buf);
sscanf( str_double, "%*[^.].%[^e]", b);
strcat(buf,b);
sscanf(buf,"%ld",&num);
C++也一样
结果保存在num里
Kvci 2006-11-03
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "conio.h"
#include "string.h"

int main()
{
long num;
char buf[20],b[20];
char *s="-32.47720e0-95";

sscanf( s , "%[^.]", buf);
sscanf( s, "%*[^.].%[^e]", b);
strcat(buf,b);
sscanf(buf,"%ld",&num);
printf("%d\n",num);

return(0);
}
Sco_field 2006-11-03
  • 打赏
  • 举报
回复
可有C++的代码?
可另外加分

double FileData[1];
char *str_double;

while(InFile >> FileData[0]) //从文件读取double数据
{

str_double=(char*)FileData;

//此处转换......

}

谢谢!
Kvci 2006-11-03
  • 打赏
  • 举报
回复
char buf[20],b[20];
char *s="-32.4720e-5";

sscanf( s , "%[^.]", buf);
sscanf( s, "%*[^.].%[^e][^+][^-][^2]", b);
printf( "%s%s", buf,b);
Sco_field 2006-11-03
  • 打赏
  • 举报
回复
先用循环找到e的位置,然后根据e后面两位的数来改变小数点的问题,以为是string,所以很容易改,改好了后就用recursion来转换成double,不用while,太麻烦。为了符合题目要求用recursion方便。最后直接把double 改成int
--------------
你的意思是用string类型获取文件中的double类型数据,得到e的位置后再转换成 double类类型,再把double强制转换成int?

不过利用string获取double数据再反变换时,可能会导致数据出错

qt_pixie 2006-11-03
  • 打赏
  • 举报
回复
先用循环找到e的位置,然后根据e后面两位的数来改变小数点的问题,以为是string,所以很容易改,改好了后就用recursion来转换成double,不用while,太麻烦。为了符合题目要求用recursion方便。最后直接把double 改成int
Sco_field 2006-11-03
  • 打赏
  • 举报
回复
你在什么里面?
用什么语言?
Excel?
---------------
VC++6.0里面
谢谢!
Sco_field 2006-11-03
  • 打赏
  • 举报
回复
比如double数据: 2.370420e+2 ,-2.470420e-5,...如何转变成 int数据 2370420 ,
-2470420,...呢?
要求是不要过多的使用while 或if等过多占用时间的语句.
------------------------
2.370420e+2 ,-2.470420e-5 这些数据是保存在文件中,利用double类型读取到FileData[0]变量中 得到的数据是237.0420,-0.00002470420,然后想通过对FileData[0]变量作变换转换成int 类型2370420,-2470420
-------------------------
我觉得首先要提出e后面的指数比如i,然后再根据指数大小对数据进行加权处理比如乘以pow(10,j),条件是i+j=6
,但是具体代码写不好
-----------------------
谢谢!


Kvci 2006-11-03
  • 打赏
  • 举报
回复
你在什么里面?
用什么语言?
Excel?
Sco_field 2006-11-03
  • 打赏
  • 举报
回复
那你的意思是去掉e后面的,把前面的当整数?

---------

对~该怎么弄呢?
qt_pixie 2006-11-03
  • 打赏
  • 举报
回复
你可以用recursion来把string转换为double,在此之前先使用一个if 和while循环来把科学记数方式转换成一般记数方式。然后直接转换成int
Kvci 2006-11-03
  • 打赏
  • 举报
回复
2.370420e+2应该是237啊
Kvci 2006-11-03
  • 打赏
  • 举报
回复
那你的意思是去掉e后面的,把前面的当整数?
那很简单啊
Sco_field 2006-11-03
  • 打赏
  • 举报
回复
2.370420e+2的int数据 是2370420?
还有可能溢出

----------------
对,我只要2370420,不会溢出
Sco_field 2006-11-03
  • 打赏
  • 举报
回复
我觉得首先要提出e后面的指数比如i,然后再根据指数大小对数据进行加权处理比如乘以pow(10,j),条件是i+j=6
,但是具体代码写不好
Kvci 2006-11-03
  • 打赏
  • 举报
回复
2.370420e+2的int数据 是2370420?
还有可能溢出

Sco_field 2006-11-03
  • 打赏
  • 举报
回复
2.370420e+2 ,-2.470420e-5 这些数据是保存在文件中,利用double类型读取到FileData[0]变量中,然后想通过对FileData[0]变量作变换转换成int

谢谢!
Kvci 2006-11-03
  • 打赏
  • 举报
回复
(int) ?
-2.470420e-5这个是你以字符串保存还是double
-2.470420e-5只是显示出来的
如果是以double保存的
一样可以强制转换
Sco_field 2006-11-03
  • 打赏
  • 举报
回复
谢谢!

以前没有用过sscanf函数,今天发现他的威力了

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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