1

Double.TryParse は値を返しますが、値は必要ありません。文字列が数値であるかどうかを判断し、単にブール値を返す必要があります。

これを行う方法はありますか?

4

6 に答える 6

12

私はあなたが決定する必要があるものを正確に検討します. 「数値です」は、最初に聞こえるよりもあいまいです。次の文字列を検討し、それらを数値と見なすかどうかを検討してください。

  • 「なん」
  • 「ナン」
  • 「無限」
  • 「0.000000000000000000000000000000000000000000000001」
  • 「1e5」
  • 「1e500」
  • 「1,000」
  • 「+1」

Double.TryParse(en-GB カルチャで - カルチャの問題を忘れないでください!) を使用すると、True、False、True、True (表現できないにもかかわらず)、True、False が得られます。本当、本当。

後で の呼び出しが成功するかどうかを知りたい場合はDouble.TryParse、ここで呼び出すのが最も正確な解決策になります。他の基準を使用している場合は、正規表現の方が適している可能性があります。使用できる基準の例:

  • + または - を指定できますが、最初の文字のみです。
  • どの文字にも単一のピリオドが存在する可能性があります。最後に 1 つを避けたい場合があります。「1」にする必要があります。有効ですか?
  • 上記以外のすべての文字は数字でなければなりません

これは、上記の 4 番目と最後の例を除くすべてを許可しません。

編集:質問のタイトルに「整数」が含まれていることに気付きました。これにより、仕様チェックが次のように大幅に削減されます。

  • 先行ゼロを許可しますか (例: -00012)?
  • 範囲は?
  • (16進数などではなく)10進数だけが必要ですか?
  • 桁区切り記号を受け入れる必要がありますか?
  • 先頭/末尾の空白に関するポリシーは何ですか?
于 2008-12-31T08:52:16.213 に答える
8

正規表現を使用することもできますが、Double.TryParse から値を破棄して先に進まないのはなぜでしょうか? このコードを複製しようとする価値はないと思います。

于 2008-12-31T08:20:50.287 に答える
5

1 つの方法は、への参照を追加してからMicrosoft.VisualBasic使用することです。Information.IsNumeric().

using Microsoft.VisualBasic;

...

if (Information.IsNumeric("1233434.0"))
{
    Console.WriteLine("Yes");
}
于 2008-12-31T08:18:51.320 に答える
1

正規表現はどうですか?

string s = "13.2";
bool bIsDecimal = Regex.IsMatch("^-?\d+(\.\d+)?$");

10 進数値かどうかをテストする必要があります。数値が小数の範囲に収まるかどうかなど、それが有効な小数であるかどうかはわかりません。

于 2008-12-31T08:20:57.667 に答える
1

Visual Studio Express (2005 と 2008 の両方) を起動しました。Intellisense によると、Double.TryParse() の戻り値は bool です。以下は、限られたテストの下で私のために働いた...

double res; // you must be under very resource-constrained 
            // conditions if you can't just declare a double
            // and forget about it

if (Double.TryParse(textBox1.Text, out res)) {
    label1.Text = "it's a number";
} else {
    label1.Text = "not a number";
}
于 2008-12-31T09:40:36.273 に答える
0

これを数値で試してください:

public static bool IsNumeric(object Expression)

{

  bool isNum;

  double retNum;

  isNum = Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any,System.Globalization.NumberFormatInfo.InvariantInfo, out retNum );

  return isNum;

}

于 2009-01-27T15:04:53.880 に答える