変数の内容が数値かどうかを確認するにはどうしたらよいですか? - ページ 5

 
Alain Verleyen:
正直なところ、OPの意図するところがよくわかりません。
もし、「変数の中身が数値かどうかを調べるにはどうしたらいいか」という一般的な要望だとすると、最もエレガントな解決策は、正規表現を使うことです。
 
Googleはあなたの味方です!CやC++を含む多くの言語での "IsNumeric "の実装のリンクはこちら(ただし、MQLはない)。

そして、より完全と思われるのがこちら(ページの一番最後にあります)。

Determine if a string is numeric - Rosetta Code
Determine if a string is numeric - Rosetta Code
  • rosettacode.org
Create a boolean function which takes in a string and tells whether it is a numeric string (floating point and negative numbers included) in the syntax the language uses for numeric literals or numbers converted from strings. The first file is the package interface containing the declaration of the Is_Numeric function. The second file is the...
 
Alain Verleyen:
正直なところ、私はOPの意図が全くわかりません。 もし、一般的な要求、つまり「変数の内容が数値かどうかを調べるにはどうしたらいいか」 と考えるなら、最もエレガントな解決策は正規表現を使うことでしょう。
私の意図は、あなたが想定している一般的な要求、つまり、数値が数値であれば、それは数値であり、数値の性質から生じるいかなる形のエラーもなく合理的な計算に使用することができる、というものです。MQL4で正規表現 に関係するコード例を提示してください。
 
そうです、OPは今ここにいて、これまでに提示されたすべての解決策と反対策を聞き、見ています。コメントされた方々の努力に感謝します。honest_knaveが提示したコードの例が好きです。第一に、彼はずっと自分のコメントをコードで裏付けてきました。第二に、彼はどの例でもハードコーディングしていません。さらに、彼のコードはどんな形のゼロ(0、0.0、0.00、.0など)にも簡単に対応し、理解しやすいものでした。とにかくStringToDouble()の使用が良いとは思えません。

皆さん@ whroeder1、honest_knave、Ernst Van Der Merwe、Alain Verleyen、Fernando Carreiroに感謝します。
 
honest_knave:

だから

  • 文字列を参照渡しにする
  • 空白を取り除く
  • ','を取り除く
  • が1つだけであることを確認する
  • または'-'が最初の文字としてのみ表示されることを確認します。
  • 他のすべての文字が0から9の間の数字であることを確認します。

bool IsValidNumber(string &text)
  {
   StringReplace(text," ",NULL);
   StringReplace(text,",",NULL);
   int point_cnt = 0;
   for(int i=StringLen(text)-1; i>=0; i--)
     {
      int this_char = StringGetChar(text,i);
      if(this_char == '.')
        {
         point_cnt++;
         if(point_cnt>1)       return(false);
         if(StringLen(text)<2) return(false);
        }
      else if(this_char == '+' || this_char == '-')
        {
         if(i>0) return(false);
        }
      else if(this_char < '0' || this_char > '9') return(false);
     }
   return(true);
  }

trueを返したら、その文字列を数値に変換することができます。

しかし、さらに確認 しなければならないことがある。最初の文字として '+' または '-' が現れることを確認する必要がある一方で、それが単独でないことを確認する必要があります。
 
honest_knave:

だから

  • 文字列を参照渡しにする
  • 空白を取り除く
  • ','を取り除く
  • が1つだけであることを確認する
  • または'-'が最初の文字としてのみ表示されることを確認します。
  • 他のすべての文字が0から9の間の数字であることを確認します。

bool IsValidNumber(string &text)
  {
   StringReplace(text," ",NULL);
   StringReplace(text,",",NULL);
   int point_cnt = 0;
   for(int i=StringLen(text)-1; i>=0; i--)
     {
      int this_char = StringGetChar(text,i);
      if(this_char == '.')
        {
         point_cnt++;
         if(point_cnt>1)       return(false);
         if(StringLen(text)<2) return(false);
        }
      else if(this_char == '+' || this_char == '-')
        {
         if(i>0) return(false);
        }
      else if(this_char < '0' || this_char > '9') return(false);
     }
   return(true);
  }

trueを返したら、その文字列を数字に変換することができます。

私は、コード(ボックス内のコード)を追加/変更することで、問題(単体の「+」または「-」)を解決したようです。下の画像を参照してください。