Double.TryParse は値を返しますが、値は必要ありません。文字列が数値であるかどうかを判断し、単にブール値を返す必要があります。
これを行う方法はありますか?
私はあなたが決定する必要があるものを正確に検討します. 「数値です」は、最初に聞こえるよりもあいまいです。次の文字列を検討し、それらを数値と見なすかどうかを検討してください。
Double.TryParse
(en-GB カルチャで - カルチャの問題を忘れないでください!) を使用すると、True、False、True、True (表現できないにもかかわらず)、True、False が得られます。本当、本当。
後で の呼び出しが成功するかどうかを知りたい場合はDouble.TryParse
、ここで呼び出すのが最も正確な解決策になります。他の基準を使用している場合は、正規表現の方が適している可能性があります。使用できる基準の例:
これは、上記の 4 番目と最後の例を除くすべてを許可しません。
編集:質問のタイトルに「整数」が含まれていることに気付きました。これにより、仕様チェックが次のように大幅に削減されます。
正規表現を使用することもできますが、Double.TryParse から値を破棄して先に進まないのはなぜでしょうか? このコードを複製しようとする価値はないと思います。
1 つの方法は、への参照を追加してからMicrosoft.VisualBasic
使用することです。Information.IsNumeric().
using Microsoft.VisualBasic;
...
if (Information.IsNumeric("1233434.0"))
{
Console.WriteLine("Yes");
}
正規表現はどうですか?
string s = "13.2";
bool bIsDecimal = Regex.IsMatch("^-?\d+(\.\d+)?$");
10 進数値かどうかをテストする必要があります。数値が小数の範囲に収まるかどうかなど、それが有効な小数であるかどうかはわかりません。
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";
}
これを数値で試してください:
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;
}