如何找出一个字符串是一个非数字整数

本文关键字:一个 数字 整数 字符串 何找出 | 更新日期: 2023-09-27 17:49:30

我需要找出一个给定的字符串是否是一个纯整数,这意味着它不是双精度和浮点数。

我尝试的是一个正则表达式:

@"^'d+$"
if (Regex.IsMatch(oStreamDataValues[i].ToString(), @"^'d+$") == false)

这很好,但只有在字符串包含像0.00这样的数字或任何其他数字值。

如何找出一个字符串是一个非数字整数

您可以使用TryParse方法:

int value;
if(int.TryParse(myString, out value)) {
    // it is an integer
}

为什么不尝试使用int.TryParse解析它:

string s = "-12";
int i;
bool isInt = int.TryParse(s, out i);

如果您还想解析0.00:

bool isInt;
decimal d;
if (decimal.TryParse(s, out d))
{
    if (d % 1 == 0)
    {
        isInt = true;
    }
    else
    {
        isInt = false;
    }
}
else
{
    isInt = false;
}

正如我所看到的,一些浮点值积极的例子在你的例子中

  4.00 // <- just 4
  1e3  // <- is 1000
 1e100 // <- 10...0 (100 zeros)

所以建议解析成Double,然后测试小数部分是否为0:

  String s = "123.0";
  Double v;
  if (Double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out v))
    if ((v - Math.Truncate(v)) < Math.Abs(v) / 1.0e20) //TODO: Adjast tolerance here
      Console.Write("this is an integer value");

我个人会使用Int32静态方法来解析字符串。有TryParse和Parse(取决于你是否想使用try/catch)。

int returnedNumber = 0;
if(!Int32.TryParse(oStreamDataValues[i].ToString(), out returnedNumber)) {
    //enter code here
}

bool isInt = true;
int returnedNumber = 0;
try {
    returnedNumber = Int32.Parse(oStreamDataValues[i].ToString());
}
catch(FormatException) {
    isInt = false;
}
if(!isInt) {
    //enter code here
}

解析方法使用以下格式:

s形参包含如下形式的数字:

(ws)(迹象)数字(ws)
方括号([和])中的项是可选的。下表描述了每个元素。

ws可选空白。
sign可选符号。
digits从0到9的数字序列。

引用:

Parse: https://msdn.microsoft.com/en-us/library/b3h1hf19%28v=vs.110%29.aspx
TryParse: https://msdn.microsoft.com/en-us/library/f02979c7%28v=vs.110%29.aspx