如何检查一个变量的内容是否是数字? - 页 2 12345 新评论 honest_knave 2017.02.16 11:52 #11 MathIsValidNumber()接受一个双数。请查看 文档。你给它的是一个字符串。如果你不是一直无视我关于使用#property strict的 评论,你会看到编译器警告你这一点。如果你把一串字母变成了一个双数,那么这个双数的值就变成了0。0是一个有效的数字。这就是为什么你的代码会返回真。 Chinedu Peter 2017.02.16 12:13 #12 honest_knave:MathIsValidNumber()接受一个双数。请查看文档。你给它的是一个字符串。如果你不是一直无视我关于使用#property strict的 评论,你会看到编译器警告你这一点。如果你把一串字母变成了一个双数,那么这个双数的值就变成了0。0是一个有效的数字。这就是为什么你的代码会返回真。 但你没有告诉我MathIsValidNumber()只比较双数,而不是字符串。顺便问一下,哪些数字不是有效数字?除了复数或无穷数,顺便说一下,谁想在MQL4中使用它们。总之,"关键字 "似乎有误导性。 Chinedu Peter 2017.02.16 12:15 #13 macpee: 但你在答案中没有告诉我,MathIsValidNumber()只比较双数,而不是字符串。顺便问一下,哪个数字不是有效数字?除了复数或无穷数,顺便说一下,谁想在MQL4中使用它们。总之,这个 "关键词 "似乎有误导性。 所以我现在再问一遍,什么命令可以告诉编译器决定一个变量是否持有一个字符串而不是任何形式的数字?谢谢你的预期回答。在visual basic中,我记得有一个关键字,如 "Isnumeric"。 honest_knave 2017.02.16 12:18 #14 macpee: 但你没有告诉我,MathIsValidNumber()只比较双数,而不是字符串。我认为你可能已经费力地查看了 文档......如果你没有继续无视我关于#属性严格的建议...macpee。 所以我现在再问一遍,什么命令可以告诉编译器决定一个变量持有一个字符串而不是任何形式的数字?谢谢你的预期答案。如果你不希望数值为0,可以将字符串类型转换为双数,然后测试它是否等于0。 Chinedu Peter 2017.02.16 12:21 #15 honest_knave:我认为你可能已经费力地查看了文档......如果你没有继续无视我关于#属性严格的建议...如果你不希望该值为0,可以将字符串类型转换为双数,并测试它是否等于0。 回答得好。我现在可以试试了。但是数字0会发生什么。我猜想它是一个双倍值,也是一个整数值。当你投掷字符串时,它返回0,当你输入0时,它返回0,那么...? honest_knave 2017.02.16 12:26 #16 macpee: 但是,数字0会怎么样。我猜想它是一个双倍值,也是一个整数值。当你投掷字符串时,它返回0,当你输入0时,它返回0,那么...?是的,这是个问题。如果cast值=0,你可以做一个字符串比较 也就是说,如果(cast_value == 0 && str_value == "0") 但你必须考虑到0.0或0.00被输入。你可以把字符串转换成一个字符数组,然后测试每个字符。这要看这有多重要。 Ernst Van Der Merwe 2017.02.16 16:09 #17 void OnStart() {//--- ObjectCreate("SimultaneousReleaseIndex1",OBJ_LABEL,0,0,0); ObjectSetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT,"Four"); ObjectCreate("SimultaneousReleaseIndex2",OBJ_LABEL,0,0,0); ObjectSetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT,"44"); ObjectCreate("SimultaneousReleaseIndex3",OBJ_LABEL,0,0,0); ObjectSetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT,"Forty4"); ObjectCreate("SimultaneousReleaseIndex4",OBJ_LABEL,0,0,0); ObjectSetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT,".1234567890"); if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT))) Print("text1 is numeric"); if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT))) Print("text2 is numeric"); if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT))) Print("text3 is numeric"); if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT))) Print("text4 is numeric"); }//---bool IsNumeric(string text) { int length=StringLen(text); for(int i=0;i<length;i++) { int char1=StringGetChar(text,i); if((char1>47 && char1<58) || char1==46) continue; else return(false); } return(true); } //+------------------------------------------------------------------+ How do I check 专家顾问 - 杂项问题 Error 4204 honest_knave 2017.02.16 16:19 #18 Ernst Van Der Merwe: void OnStart() {//--- ObjectCreate("SimultaneousReleaseIndex1",OBJ_LABEL,0,0,0); ObjectSetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT,"Four"); ObjectCreate("SimultaneousReleaseIndex2",OBJ_LABEL,0,0,0); ObjectSetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT,"44"); ObjectCreate("SimultaneousReleaseIndex3",OBJ_LABEL,0,0,0); ObjectSetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT,"Forty4"); ObjectCreate("SimultaneousReleaseIndex4",OBJ_LABEL,0,0,0); ObjectSetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT,".1234567890"); if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT))) Print("text1 is numeric"); if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT))) Print("text2 is numeric"); if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT))) Print("text3 is numeric"); if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT))) Print("text4 is numeric"); }//---bool IsNumeric(string text) { int length=StringLen(text); for(int i=0;i<length;i++) { int char1=StringGetChar(text,i); if((char1>47 && char1<58) || char1==46) continue; else return(false); } return(true); } //+------------------------------------------------------------------+诚实_knave。是的,这是个问题。如果cast值=0,你可以做一个字符串比较 也就是说,如果(cast_value == 0 && str_value == "0") 但你必须考虑到0.0或0.00被输入。你可以把字符串转换成一个字符数组,然后测试每个字符。这要看这有多重要。是的,这类事情。你需要注意的是。多个小数点(可以通过,但不应该)。使用+和-符号(不会通过,但应该通过)使用,作为千位分隔符,或作为小数点(不会通过,但应该)。一个单独的小数点,没有其他字符(可以通过,但不应该)。超过演员能力的数字 Ernst Van Der Merwe 2017.02.16 16:48 #19 honest_knave:是的,这类事情。你需要注意的是。多个小数点(可以通过,但不应该)。使用+和-符号(不能通过,但应该通过)使用,作为千位分隔符,或作为小数点(不会通过,但应该)。一个单独的小数点,没有其他字符(可以通过,但不应该)。超出演员能力的数字空格 honest_knave 2017.02.16 17:23 #20 Ernst Van Der Merwe:空间 是的,说得好! 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
MathIsValidNumber()接受一个双数。请查看 文档。
你给它的是一个字符串。
如果你不是一直无视我关于使用#property strict的 评论,你会看到编译器警告你这一点。
如果你把一串字母变成了一个双数,那么这个双数的值就变成了0。
0是一个有效的数字。
这就是为什么你的代码会返回真。
MathIsValidNumber()接受一个双数。请查看文档。
你给它的是一个字符串。
如果你不是一直无视我关于使用#property strict的 评论,你会看到编译器警告你这一点。
如果你把一串字母变成了一个双数,那么这个双数的值就变成了0。
0是一个有效的数字。
这就是为什么你的代码会返回真。
但你在答案中没有告诉我,MathIsValidNumber()只比较双数,而不是字符串。顺便问一下,哪个数字不是有效数字?除了复数或无穷数,顺便说一下,谁想在MQL4中使用它们。总之,这个 "关键词 "似乎有误导性。
但你没有告诉我,MathIsValidNumber()只比较双数,而不是字符串。
我认为你可能已经费力地查看了 文档......
如果你没有继续无视我关于#属性严格的建议...
所以我现在再问一遍,什么命令可以告诉编译器决定一个变量持有一个字符串而不是任何形式的数字?谢谢你的预期答案。
如果你不希望数值为0,可以将字符串类型转换为双数,然后测试它是否等于0。
我认为你可能已经费力地查看了文档......
如果你没有继续无视我关于#属性严格的建议...
如果你不希望该值为0,可以将字符串类型转换为双数,并测试它是否等于0。
但是,数字0会怎么样。我猜想它是一个双倍值,也是一个整数值。当你投掷字符串时,它返回0,当你输入0时,它返回0,那么...?
是的,这是个问题。
如果cast值=0,你可以做一个字符串比较
也就是说,如果(cast_value == 0 && str_value == "0")
但你必须考虑到0.0或0.00被输入。
你可以把字符串转换成一个字符数组,然后测试每个字符。
这要看这有多重要。
{
//---
ObjectCreate("SimultaneousReleaseIndex1",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT,"Four");
ObjectCreate("SimultaneousReleaseIndex2",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT,"44");
ObjectCreate("SimultaneousReleaseIndex3",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT,"Forty4");
ObjectCreate("SimultaneousReleaseIndex4",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT,".1234567890");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT)))
Print("text1 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT)))
Print("text2 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT)))
Print("text3 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT)))
Print("text4 is numeric");
}
//---
bool IsNumeric(string text)
{
int length=StringLen(text);
for(int i=0;i<length;i++)
{
int char1=StringGetChar(text,i);
if((char1>47 && char1<58) || char1==46)
continue;
else
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
{
//---
ObjectCreate("SimultaneousReleaseIndex1",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT,"Four");
ObjectCreate("SimultaneousReleaseIndex2",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT,"44");
ObjectCreate("SimultaneousReleaseIndex3",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT,"Forty4");
ObjectCreate("SimultaneousReleaseIndex4",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT,".1234567890");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT)))
Print("text1 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT)))
Print("text2 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT)))
Print("text3 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT)))
Print("text4 is numeric");
}
//---
bool IsNumeric(string text)
{
int length=StringLen(text);
for(int i=0;i<length;i++)
{
int char1=StringGetChar(text,i);
if((char1>47 && char1<58) || char1==46)
continue;
else
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
是的,这是个问题。
如果cast值=0,你可以做一个字符串比较
也就是说,如果(cast_value == 0 && str_value == "0")
但你必须考虑到0.0或0.00被输入。
你可以把字符串转换成一个字符数组,然后测试每个字符。
这要看这有多重要。
是的,这类事情。
你需要注意的是。
是的,这类事情。
你需要注意的是。
Ernst Van Der Merwe: