| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1842 人关注过本帖
标题:浮点转化字符的问题
只看楼主 加入收藏
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
可以解决误差吗?

[此贴子已经被作者于2006-10-27 18:28:52编辑过]



谁有强殖装甲第二部,可以Q我460054868
2006-10-27 18:28
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 
当你把数输入到内存中时,由于浮点数的存储格式,误差就存在了.

要想消除误差,你可以用数组存储浮点数(就和处理大数一样),那就很麻烦了.如果精度够的话,一般是不会用的


2006-10-27 19:10
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
试编程序看看

谁有强殖装甲第二部,可以Q我460054868
2006-10-27 20:00
☆註⊙諨☆
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2006-10-7
收藏
得分:0 
误差肯定有哦```
而且不同的计算机误差也会不同吧.

2006-10-27 21:18
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
可以完整程序供上来吗

谁有强殖装甲第二部,可以Q我460054868
2006-10-27 23:40
e4lich
Rank: 2
等 级:新手上路
威 望:4
帖 子:182
专家分:0
注 册:2006-10-26
收藏
得分:0 

#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
int a,b,i,j=0,flag=1;
double m,n,k;
char c[80];
scanf("%lf",&m);
b=a=(int)m;
if(m<0)
{flag=-1;a*=-1;b*=-1;j=1;}
if(a==0)
{ if(flag==1)
{c[0]='0';i=1;}
else
{c[0]='-';c[1]='0';i=2;}
}
else{
while(a!=0)
{a=a/10;j++;}
for(i=0;i<j;i++)
{ c[j-i-1]=b%10+'0';b/=10;}
if(flag==-1)
c[0]='-';
}
c[i]='.';
j=1;

n=modf(m,&k);
if(flag==-1)
m=(m-b)*(-1);
while(1)
{
n=n*10;
n=modf(n,&k);
c[i+1]=k+'0';
i++;
if(j==10)
{c[i+1]='0';break;}
j++;
}
printf("\n%s\n",c);
getch();
return 0;
}


我只想变强!     
2006-10-28 02:09
e4lich
Rank: 2
等 级:新手上路
威 望:4
帖 子:182
专家分:0
注 册:2006-10-26
收藏
得分:0 

上面的贴子,应该不用我解释了吧!


我只想变强!     
2006-10-28 02:14
e4lich
Rank: 2
等 级:新手上路
威 望:4
帖 子:182
专家分:0
注 册:2006-10-26
收藏
得分:0 

不好意思,上面的程序运行负数时有错误,应该改为:

#include<conio.h>
#include<math.h>
int main()
{
int a,b,i,j=0,flag=1;
double m,n,k;
char c[80];
scanf("%lf",&m);
b=a=(int)m;
if(m<0)
{flag=-1;a*=-1;b*=-1;j=1;}
if(a==0)
{ if(flag==1)
{c[0]='0';i=1;}
else
{c[0]='-';c[1]='0';i=2;}
}
else{
while(a!=0)
{a=a/10;j++;}
for(i=0;i<j;i++)
{ c[j-i-1]=b%10+'0';b/=10;}
if(flag==-1)
c[0]='-';
}
c[i]='.';
j=1;
if(flag==-1)
m=m*-1;
n=modf(m,&k);

while(1)
{
n=n*10;
n=modf(n,&k);
c[i+1]=k+'0';
i++;
if(j==10)
{c[i+1]='0';break;}
j++;
}
printf("\n%s\n",c);
getch();
return 0;
}

不过在运行负数时还是有误差,不过正数的误差已经没有了,相信继续努力的话,负数的误差也能解决,先睡个觉,希望明天看到有高手指点迷津啦!


我只想变强!     
2006-10-28 02:37
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 

#include<stdio.h>
#include<conio.h>
#include<math.h>
int main()
{
int a,b,i,j=0,flag=1;
double m,n,k;
char c[80];
scanf("%lf",&m);
b=a=(int)m;
if(m<0)
{flag=-1;a*=-1;b*=-1;j=1;}
if(a==0)
{ if(flag==1)
{c[0]='0';i=1;}
else
{c[0]='-';c[1]='0';i=2;}
}
else{
while(a!=0)
{a=a/10;j++;}
for(i=0;i<j;i++)
{ c[j-i-1]=b%10+'0';b/=10;}
if(flag==-1)
c[0]='-';
}
c[i]='.';
j=1;
if(flag==-1)
m=m*-1;
n=modf(m,&k);

while(1)
{
n=n*10;
n=modf(n,&k);
c[i+1]=(char)(k+'0');
i++;
if(j==10)
{c[i+1]=0;break;}
j++;
}
printf("\n%s\n",c);
getch();
return 0;
}

多谢你把程序供。我修改你的程序一些小错误,但不能实现要求包括正数。

[此贴子已经被作者于2006-10-28 10:35:36编辑过]


谁有强殖装甲第二部,可以Q我460054868
2006-10-28 10:24
e4lich
Rank: 2
等 级:新手上路
威 望:4
帖 子:182
专家分:0
注 册:2006-10-26
收藏
得分:0 
不是吧,我运行过正数可以的呀!

我只想变强!     
2006-10-28 10:27
快速回复:浮点转化字符的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029962 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved