#include
#include
char publicbuff[20];
double atof(const char* s)//字符串转换成浮点型数据
{
register const char
#include
#include
char publicbuff[20];
double atof(const char* s)//字符串转换成浮点型数据
{
register const char* p=s;
register long double value=0.L;
int sign=0;
long double factor;
if(*p =='-'||*p==' ')//把符号赋给字符sign,指针后移
{
sign = *p ;
}
//处理数字字符
while ( (unsigned int)(*p - '0') =buff)
*str = *p--;
*str=' ';
}
char *float2String(float num) //浮点型数据转换成字符串
{
char *p;
long int A;
long int B;
long int c;
c=1000000;
if(num>0)
{
A = 1*num;
}
else
{
A = -1*num;
}
memset(publicbuff,' ',20);
p=publicbuff;
if(num0)
{
B=(num-A)*10000000;
}
else
{
B=(-1*num-A)*10000000;
}
//printf("%ld
",B);
if(B>0)
{
*p ='.';
while(B
{
*p='0';
p ;
c=c/10;
}
if(B==0)
{
B=B/10;
}
Int2Str(B,p);
}
return publicbuff;
}
void main()
{
long double num;
char str[20];
gets(str);
num=atof(str);
float2String(num);
puts(publicbuff);
getchar();
/*********************************************************
申明下我要做的是一个单片机上的计算器程序
不要问为什么要这么麻烦的将数据转来转去
因为那个环境没有这些库函数,所以必须这要做
但是我写完后精度有问题
按照理论,long double可以处理16位小数
但是这个你多测试几组数据就会发现精度有问题
比如输入0.1234567,OK没问题
但是输入其它小数会出现精度丢失情况
请大家测试代码,认真思考后给个建议
也可以说说你们做计算器的思路
**********************************************************/
}
展开
全部