int类型转换为float类型数据

本文探讨了在MFC上位机程序中,将EDIT控件关联为float类型变量时的注意事项,特别针对为空时的处理方式,并提供了一种将int类型转换为CString类型的函数实现。此外,还介绍了一个将CString转换为float类型的函数,并通过测试结果验证了其正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做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();
}


 实验结果:





     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值