最近在做MFC上位机程序时,将EDIT控件关联为float类型变量时,EDIT控件一旦为空,程序就会报错任何退出。了解到EDIT控件关联为CString类型时,为空时仍能正常运行,这样做的话需要将CString类型的数据转换为float类型的数据才能使用。
int类型转换为CString类型的 转换函数:
void *data_changeto_str(int data,int decinum,int num) //num表示数据data的有效位数 该值一定大于 decinum
{
static char ch[10];
int i,data1,count=0;
int ch_count = 0;
if(data < 0)
{
ch[0] = '-'; //字符串头添加'-'符号
data = -data; //取反
ch_count++;
}
else
{
ch[0] = ' '; //字符串头添加'-'符号
ch_count++;
}
data1 = data;
while(data1>=1)
{
count++;
data1 = data1/10;
}
data1 = data;
if(decinum == 0)
{
if(count == 0)
{
for(i=0; i<num; i++)
{
ch[i+1] = ' ';
}
ch[num] = '0';
}
else
{
for(i=0; i<count;i++)
{
ch[num-i] = data1%10 + 0x30;
data1 = data1/10;
}
for(i=count; i< num; i++)
{
ch[num-i] = ' ';
}
}
ch[num+1] = 0;
}
else if(decinum >= count) //小数位的个数 大于数据data的位数 num的值一定大于decinum
{
for(i=0; i<count; i++)
{
ch[num-i+1] = data1%10 + 0x30;
data1 = data1/10;
}
for(i=count; i< decinum;i++)
{
ch[num-i+1] = '0';
}
ch[num-decinum+1] = '.';
ch[num-decinum] = '0';
for(i=decinum+1; i<num; i++)
{
ch[num-i] = ' ';
}
ch[num + 2] = 0;
}
else
{
for(i=0; i<decinum; i++)
{
ch[num-i+1] = data1%10 + 0x30;
data1 = data1/10;
}
ch[num - i+1] = '.';
for(i=decinum; i<count; i++)
{
ch[num-i] = data1%10 + 0x30;
data1 = data1/10;
}
for(i=count; i<num; i++)
{
ch[num-i] = ' ';
}
ch[num+2] = 0;
}
return &ch[0]; //返回字符串
}
测试结果:
CString转换为float类型的转换函数:
ffloat CString_change_float(char *str,int decinum,int num)
{
static char ch[20];
float a = 0.0,b = 0.0;
int Deci = 0;
int len = strlen(str);
if(len - 1 > num)
{
cout<<"Input data error,Please Input float data,for example 00.00"<<endl;
return 0;
}
for(int i=0; i< len; i++)
{
if(str[i] == '.')
Deci = i; //记录小数点的位置
}
//判断整数位是否超标
if(Deci > 0)
{
if(Deci > (num - decinum))
{
cout<<"Input data error,Please Input float data,for example 00.00"<<endl;
return 0;
}
}
else if(Deci == 0)
{
if(len > num - decinum)
{
cout<<"Input data error,Please Input float data,for example 00.00"<<endl;
return 0;
}
}
if(Deci > 0)
{
for(int i = 0; i< Deci; i++)
{
a *= 10;
a += str[i]-'0';
}
for(int i=len - 1; i>Deci; i--)
{
b += str[i] - '0';
b *= 0.1;
}
}
else if(Deci == 0)
{
for(int i = 0; i< len; i++)
{
a *= 10;
a += str[i]-'0';
}
}
a = a + b;
return a;
}
int main(void)
{
float data;
data = CString_change_float("123.4",2,5);
cout<<data<<endl;
data = CString_change_float("123.4",1,4);
cout<<data<<endl;
data = CString_change_float("123.4",0,4);
cout<<data<<endl;
getchar();
getchar();
}
实验结果: