运行出现浮点数问题
运行时出现project raised exception class EConvererror with message ' '不是一个有效的浮点数。请问是怎么回事?
代码如下:
//---------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "diyibufen.h"
#include "math.h"
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TData_Memo *Data_Memo;
//---------------------------------------
__fastcall TData_Memo::TData_Memo(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void __fastcall TData_Memo::btnquitClick(TObject *Sender)
{
Close();
}
//---------------------------------------
void __fastcall TData_Memo::btncountClick(TObject *Sender)
{
int position;
AnsiString tmp,data;
float Uin,Ucp,Upp,Ucc,Upc,Fpp,Fpc,Fcp,Fcc,App,Cpp;
int Nin,Npp,Ncp,Npc,Ncc;
boolean Head_ID;
if(Trim(appedi->Text)=="")
{MessageBoxEx(Handle,"请输入App的值","信息",
MB_OK|MB_ICONINFORMATION,LANG_CHINESE);
appedi->Text="";
appedi->SetFocus();
return;}
if(Trim(cppedi->Text)=="")
{MessageBoxEx(Handle,"请输入Cpp的值","信息",
MB_OK|MB_ICONINFORMATION,LANG_CHINESE);
cppedi->Text="";
cppedi->SetFocus();
return;}
if(Trim(filenameedi->Text)=="")
{MessageBoxEx(Handle,"请输入所要处理的高温合金实验数据文件名","信息",
MB_OK|MB_ICONINFORMATION,LANG_CHINESE);
filenameedi->Text="";
filenameedi->SetFocus();
return;}
try
{StrToFloat(Trim(appedi->Text));
}
catch(...)
{MessageBoxEx(Handle,"App不是有效的数字","信息",
MB_OK|MB_ICONINFORMATION,LANG_CHINESE);
appedi->SetFocus() ;
return;}
try
{StrToFloat(Trim(cppedi->Text));
}
catch(...)
{MessageBoxEx(Handle,"Cpp不是有效的数字","信息",
MB_OK|MB_ICONINFORMATION,LANG_CHINESE);
cppedi->SetFocus() ;
return;}
TStringList *ListN=new TStringList();
try
{data_memo->Lines->LoadFromFile(filenameedi->Text);
}
catch(...)
{MessageBoxEx(Handle,"请输入正确的文件名","错误",
MB_OK|MB_ICONERROR,LANG_CHINESE);
appedi->SetFocus() ;
return;}
Head_ID=true;
for(int i=0;i<data_memo->Lines->Count;i++)
try
{tmp=Trim(data_memo->Lines->Strings[i]);
if(tmp=="")
continue;
position=tmp.Pos("/t");
data=tmp.SubString(1,position-1);
Nin=StrToFloat(Trim(data)) ;
tmp=tmp.SubString(position+1,tmp.Length()-position);
position=tmp.Pos("/t");
data=tmp.SubString(1,position-1);
Uin=StrToFloat(Trim(data)) ;
tmp=tmp.SubString(position+1,tmp.Length()-position);
position=tmp.Pos("\t");
data=tmp.SubString(1,position-1);
Upp=StrToFloat(Trim(data)) ;
tmp=tmp.SubString(position+1,tmp.Length()-position);
position=tmp.Pos("\t");
data=tmp.SubString(1,position-1);
Ucp=StrToFloat(Trim(data)) ;
tmp=tmp.SubString(position+1,tmp.Length()-position);
position=tmp.Pos("\t");
data=tmp.SubString(1,position-1);
Upc=StrToFloat(Trim(data)) ;
tmp=tmp.SubString(position+1,tmp.Length()-position);
Ucc=StrToFloat(Trim(tmp)) ;
if(Head_ID)
{if(Ucp>10E-6)
ListN->Add("Ncp/tUcp");
if(Upc>10E-6)
ListN->Add("Npc/tUpc");
if(Ucc>10E-6)
ListN->Add("Ncc/tUcc");
Head_ID=false;
}
App= StrToFloat(Trim(appedi->Text));
Cpp= StrToFloat(Trim(cppedi->Text));
Fpp=Upp/Uin;
Npp=pow(Upp/App,1/Cpp);
if(Ucp>10E-6)
{Fcp=Ucp/Uin;
Ncp=Fcp/(1/float(Nin)-Fpp/Npp);
ListN->Add(FloatToStr(Ncp)+"\t"+Format("%,4f",ARRAYOFCONST((Ucp))));
}
if(Upc>10E-6)
{Fpc=Upc/Uin;
Npc=Fpc/(1/float(Nin)-Fpp/Npp);
ListN->Add(FloatToStr(Npc)+"\t"+Format("%,4f",ARRAYOFCONST((Upc))));
}
if(Ucc>10E-6)
{Fcc=Ucc/Uin;
Ncc=Fcc/(1/float(Nin)-Fpp/Npp);
ListN->Add(FloatToStr(Ncc)+"\t"+Format("%,4f",ARRAYOFCONST((Ucc))));
}
}
catch(...)
{
MessageBoxEx(Handle,"数据文件格式错误","错误",
MB_OK|MB_ICONERROR,LANG_CHINESE);
delete ListN;
data_memo->Lines->Text="";
filenameedi->SetFocus();
return;}
if(MessageBoxEx(Handle,"计算完成,是否保存数据?","保存",
MB_OKCANCEL|MB_ICONQUESTION,LANG_CHINESE)==IDOK)
{
if(savedialog->Execute())
ListN->SaveToFile(savedialog->FileName);
}
delete ListN;
}
//---------------------------------------
void __fastcall TData_Memo::FormShow(TObject *Sender)
{
filenameedi->Text=opendia->FileName;
}
//---------------------------------------
代码是这个,但是没有数据,所以我随便弄了一个文件进去试一下的。
[解决办法]
自己调试看看吧,估计是哪个除数变成0了。
[解决办法]
应该StrToFloat函数在转换字符串到浮点数时,字符串的格式不符合浮点数的规范而产生的异常
float eValue;
try {
eValue = StrToFloat(str);
} catch ( EConvertError &e ) {
ShowInfo("请输入有效的数字");
}