※ 引述《wope (獨立黑色色彩)》之銘言:
: 開發平台: VS2005.net
: 目前狀況:
: 我目前也只會字很簡單的把textBox裡的東西轉成double
: 想下一個判斷式,如果Textbox中不是數字或沒輸入字可以回傳個東西
: if內的判斷不會寫@@
: int A=0;
: if(Textbox中不是數字或沒輸入字){
: A=1;
: }
: else{
: no1 = Convert::ToDouble(textBox1->Text);
: }
如果你要判斷string裡面是不是正常的數字
比較好的方法是用Regular Expression
不過既然你用的是C++/CLI, 可以用TryParse直接搞定
你的程式碼寫A=1, 所以我這邊預設值就用1了
double ParseDouble(String^ str, double defaultValue=1.0)
{
double result;
if(double::TryParse(str, result))
{
return result;
}
return defaultValue;
}
//用法
no1 = ParseDouble(textBox1->Text);
同場加映, C的轉換法:
double StringToDouble(const char* str, double defaultValue)
{
char* endptr = 0;
double result = strtod(str, &endptr);
if(endptr == str)
{
return defaultValue
}
if(*endptr != 0)
{
return defaultValue
}
return result;
}
//C++/CLI
//using namespace System::Runtime::InteropServices;
char* str = (char*)Marshal::StringToHGlobalAnsi(textBox1->Text).ToPointer();
no1 = StringToDobule(str, 1.0);
Marshal::FreeHGlobal((IntPtr)str);
不過考慮到StringToHGlobalAnsi會copy一次字串
加上會多出一些Marshalling的內部呼叫
在C++/CLI這種做法沒什麼好處, 直接用.NET的library就好了...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.161.141.9