C#中判断一个字符串是否是数字的几种方法
在C#中没有函数可以直接判断一个字符串是不是数字的,于是就有大神们想出来了各种方法,是否好用不做评价,能解决问题就行。
下面使用一个例子来做测试,自写一个isnumber函数,返回true是数字格式,返回false则不是。
string msg=txt_msg.Text.Trim().ToString();
if (isNumber(msg))
{
MessageBox.Show("数字格式");
}
else
{
MessageBox.Show("不是数字格式");
}
强制转换
强制转换就是靠try的出错消息来判断是不是数字,比如你想转换成int,在try中如果能成功转换就不会出错,如果出错了,则说明无法转换成int,简单粗暴,但觉得不好。
public bool isNumber(string msg)
{
try
{
Convert.ToInt32(msg);
return true;
}
catch (Exception ex)
{
return false;
}
}
我们输入123,返回true,输入123.5,返回false,是因为它只对是不是能转换成整型做了判断,带小数的字符串在转换成整形时会出错,那就修改下代码,看能否转换成带精度的,适应性更好一些。
public bool isNumber(string msg)
{
try
{
Convert.ToDecimal(msg);
return true;
}
catch (Exception ex)
{
return false;
}
}
修改以后这下就没有问题了。
TryParse方法
不管是int还是decimal,它的tryParse方法都会返回一个bool值,如果是true就转换成功了,这个是相当的简洁。
public bool isNumber(string msg)
{
return decimal.TryParse(msg, out decimal num);
}
就是不知道它的原理是怎么实现的
IsDigit方法
这是一个不常用的方法,一般常见于c语言中,它用来判断一个字符是不是十进制的数字,当然对于有小数点的,它会认为不是数字,需要特别的处理一下,在c#中也有char.IsDigit方法,返回一个bool值。
public bool isNumber(string msg)
{
bool result = true;
foreach (char c in msg)
{
if (char.IsDigit(c) || c == '.')
{
}
else
{
return false;
}
}
return result;
}
如果有人输入多个小数点的话,它还是会认为这是一个数字格式。
哪种方法好用还是得看自己的习惯了。