変数の内容が数値かどうかを確認するにはどうしたらよいですか? - ページ 2 12345 新しいコメント honest_knave 2017.02.16 11:52 #11 MathIsValidNumber() はdouble を受け付けます。ドキュメントを確認して ください。あなたは文字列を与えて いるのです。もしあなたが#property strictを 使うという私のコメントを無視し続けなければ、コンパイラがこのことについて警告しているのがわかるでしょう。文字列をdoubleにすると、doubleの値は0に なります。0は有効な数字です。だから、あなたのコードはtrueを返しているのです。 Chinedu Peter 2017.02.16 12:13 #12 honest_knave:MathIsValidNumber() はdouble を受け付けます。ドキュメントを確認してください。あなたは文字列を与えて いるのです。もしあなたが#property strictを 使うという私のコメントを無視し続けなければ、コンパイラがこのことについて警告しているのがわかるでしょう。文字列をdoubleにすると、doubleの値は0に なります。0は有効な数字です。だから、あなたのコードはtrueを返しているのです。 しかし、MathIsValidNumber()はdoubleのみを 比較し、文字列は比較しないことを回答で教えてくれませんでしたね。ところで、有効数字でない数字とはどのようなものでしょうか?複素数や無限大は別として、誰がMQL4でそれらを使いたいのでしょうか。いずれにせよ、"Keyword "は誤解を招きそうです。 Chinedu Peter 2017.02.16 12:15 #13 macpee: しかし、MathIsValidNumber()が比較するのはdoubleのみ で、stringは比較しないことを回答で教えてくれませんでしたね。ところで、どの数字が有効数字ではないのでしょうか?複素数や無限大は別として、誰がMQL4でそれらを使いたいのでしょうか。いずれにせよ、この「キーワード」は誤解を招きそうです。 つまり、変数が文字列を保持しているかどうかをコンパイラに判断させるコマンドは何でしょうか?予想通りの回答ありがとうございました。ビジュアルベーシックでは、「Isnumeric」のようなキーワードがあったと記憶しています。 honest_knave 2017.02.16 12:18 #14 macpee: しかし、MathIsValidNumber()はdoubleのみを 比較し、文字列を比較しないことを回答では教えてくれませんでした。ドキュメントを確認 したのかと思っていたのですが...。そして、もしあなたが#property strictに関する私の助言を無視し続けなければ...macpee では、もう一度お聞きしますが、変数が数値ではなく文字列を保持しているかどうかをコンパイラに判断させるには、どのようなコマンドを使用すればよいのでしょうか?予想通りの回答ありがとうございます。もし、値が0になることを想定していないのであれば、文字列をdoubleにタイプキャストして、0に等しくないかどうかテストすればよいでしょう。 Chinedu Peter 2017.02.16 12:21 #15 honest_knave:ドキュメントを確認したのかと思っていたのですが...。そして、もしあなたが#property strictに関する私のアドバイスを無視し続けたのなら...値が0になることを想定していないのであれば、文字列をdoubleにタイプキャストして、それが0に等しくないかどうかをテストしてください。 いい回答ですね。これで試せます。しかし、数字の0はどうなるのでしょう。整数値だけでなく、double値もあると推測されます。文字列をキャストすると0が返され、0を入力すると0が返される、では...? honest_knave 2017.02.16 12:26 #16 macpee: しかし、数字の0はどうなるのだろう。整数値だけでなく、2倍値もあるのだろう。文字列をキャストすると0が返され、0を入力すると0が返される、では...?うん、それは問題だね。キャスト値=0なら、文字列比較は可能です。 つまり、if(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); } //+------------------------------------------------------------------+honest_knave:うん、それは問題だね。キャスト値=0なら、文字列比較は可能です。 つまり、if(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千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
MathIsValidNumber() はdouble を受け付けます。ドキュメントを確認して ください。
あなたは文字列を与えて いるのです。
もしあなたが#property strictを 使うという私のコメントを無視し続けなければ、コンパイラがこのことについて警告しているのがわかるでしょう。
文字列をdoubleにすると、doubleの値は0に なります。
0は有効な数字です。
だから、あなたのコードはtrueを返しているのです。
MathIsValidNumber() はdouble を受け付けます。ドキュメントを確認してください。
あなたは文字列を与えて いるのです。
もしあなたが#property strictを 使うという私のコメントを無視し続けなければ、コンパイラがこのことについて警告しているのがわかるでしょう。
文字列をdoubleにすると、doubleの値は0に なります。
0は有効な数字です。
だから、あなたのコードはtrueを返しているのです。
しかし、MathIsValidNumber()が比較するのはdoubleのみ で、stringは比較しないことを回答で教えてくれませんでしたね。ところで、どの数字が有効数字ではないのでしょうか?複素数や無限大は別として、誰がMQL4でそれらを使いたいのでしょうか。いずれにせよ、この「キーワード」は誤解を招きそうです。
しかし、MathIsValidNumber()はdoubleのみを 比較し、文字列を比較しないことを回答では教えてくれませんでした。
ドキュメントを確認 したのかと思っていたのですが...。
そして、もしあなたが#property strictに関する私の助言を無視し続けなければ...
では、もう一度お聞きしますが、変数が数値ではなく文字列を保持しているかどうかをコンパイラに判断させるには、どのようなコマンドを使用すればよいのでしょうか?予想通りの回答ありがとうございます。
もし、値が0になることを想定していないのであれば、文字列をdoubleにタイプキャストして、0に等しくないかどうかテストすればよいでしょう。
ドキュメントを確認したのかと思っていたのですが...。
そして、もしあなたが#property strictに関する私のアドバイスを無視し続けたのなら...
値が0になることを想定していないのであれば、文字列をdoubleにタイプキャストして、それが0に等しくないかどうかをテストしてください。
しかし、数字の0はどうなるのだろう。整数値だけでなく、2倍値もあるのだろう。文字列をキャストすると0が返され、0を入力すると0が返される、では...?
うん、それは問題だね。
キャスト値=0なら、文字列比較は可能です。
つまり、if(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);
}
//+------------------------------------------------------------------+
うん、それは問題だね。
キャスト値=0なら、文字列比較は可能です。
つまり、if(cast_value == 0 && str_value == "0") です。
しかし、0.0や0.00が入力されることを考えなければならない。
文字列を文字配列に分解して、各文字をテストすることもできます。
どの程度重要かによるな。
ええ、そういうことです。
注意しなければならないのは
そうですね、そういうことです。
注意しなければならないのは
Ernst Van Der Merwe: