怎么判断一个object是不是数字

时间:2023-01-30 14:59:18
这个object可能是int, long, float, double......等,有没有一句话可以判断出它是数字
例如在java中是这样的:if( object instanceOf Number ) ......
另外,如何将数字按照指定的格式串格式化成一个字符串?如###,###.#0

14 个解决方案

#1


没有

#2


int.TryParse()

#3


(123456.7891).ToString("N2");

#4


1.double.TryParse(s,out result)

参数
s
包含要转换的数字的字符串。 

result
当此方法返回时,如果转换成功,则包含与s参数等效的双精度浮点数;如果转换失败,则包含零。如果s参数为空引用,不是格式有效的数字或者表示的数字小于MinValue或大于MaxValue,则转换将失败。该参数未经初始化即被传递。 

返回值
如果s转换成功,则为true;否则为false。

2.result.ToString("###,###.#0")

使用指定的格式,将此实例的数值转换为它的等效字符串表示形式。 

#5


没有一句话的判断,不过可以使用自定义函数

public bool isNumeric(string inString)
  {
   inString=inString.Trim();
   bool haveNumber=false;
   bool haveDot=false;
   for(int i=0;i<inString.Length;i++)
   {
    if (Char.IsNumber(inString[i]))
    {
     haveNumber=true;
    }
    else if(inString[i].ToString() == ".")
    {
     if (haveDot)
     {
      return false;
     }
     else
     {
      haveDot=true;
     }
    }
    else if(i==0)
    {
     if(inString[i].ToString() !="+" && inString[i].ToString() != "-")
     {
      return false;
     }
    }
    else
    {
     return false;
    }
    if(i>20)
    {
     return false;
    }
   }
   return haveNumber;
  } 

#6


// 标准数字格式字符串用法说明及举例
class NumberFormat
{
  static void Main()
  {
    // {index[,alignment][:format]}
    // index     - 从零开始的整数,指示对象列表中要格式化的元素。
    // alignment - 可选整数,指示最小宽度,不足部分用空格填充。负数指示左对齐,正数指示右对齐。
    // format    - 格式字符串。标准数字格式字符串采取“Axx”形式,A为单个字母, 说明如下:
    //    c - 货币,     xx指示小数位数
    //    d - 十进制,   xx指示有效位数, 不足用零填充, 只能用于整数
    //    x - 十六进制, 用法同d
    //    e - 指数,     xx指示小数位数
    //    f - 固定点,   xx指示小数位数
    //    n - 数字,     输出千位分隔符, 其余同f
    //    g - 常规,     xx指示有效位数, 使用e或f中较短者
    //    p - 百分比,   xx指示小数位数
    // 例如以下语句的输出为: "|¥-5.00|-05| -05|-5.0 |-500%|12345.7|12,345.7|"
    System.Console.WriteLine("|{0:c}|{0:d2}|{0,4:d2}|{0,-5:f1}|{0:p0}|{1:f1}|{1:n1}|", -5, 12345.67);
  }
}

#7


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;
    }

#8


但是当object="123"时,它是字符串对象,不应该是数字

#9


一个个的判断也不是很复杂,毕竟数字类型是有限的
public static bool IsNumeric(object AObject)
{
    return AObject is sbyte || AObject is byte ||
        AObject is short || AObject is ushort ||
        AObject is int || AObject is uint ||
        AObject is long || AObject is ulong ||
        AObject is double || AObject is char ||
        AObject is decimal || AObject is float ||
        AObject is double;
}

#10



object str="3343ffff";
        string  newstr = str.ToString();
 for (int i = 0; i<newstr .Length;i++ )
        {
            if (char.IsNumber(newstr , i))
            {
               --是数字类型!;
return;
            }
            else
            {
               --不是数字类型!;
return;
            }
           
        }

#11


object obj = "xxx";
try
{
    Convert.ToDecimal(obj);
    return true;
}
catch(Exception)
{
    return false ;
}

#12


呵呵,楼上的方法是比较常用的,硬来不行那就不是数字了呗~  

#13


其实只要这样: 判断这个object能否转换为decimal, 可以说明是数字, 否则不是
所以9楼的代码 可以简化为
public static bool IsNumeric(object AObject)
{
    return (AObject as decimal) != null;
}

个人观点 不一点正确呵呵

#14


mark

#1


没有

#2


int.TryParse()

#3


(123456.7891).ToString("N2");

#4


1.double.TryParse(s,out result)

参数
s
包含要转换的数字的字符串。 

result
当此方法返回时,如果转换成功,则包含与s参数等效的双精度浮点数;如果转换失败,则包含零。如果s参数为空引用,不是格式有效的数字或者表示的数字小于MinValue或大于MaxValue,则转换将失败。该参数未经初始化即被传递。 

返回值
如果s转换成功,则为true;否则为false。

2.result.ToString("###,###.#0")

使用指定的格式,将此实例的数值转换为它的等效字符串表示形式。 

#5


没有一句话的判断,不过可以使用自定义函数

public bool isNumeric(string inString)
  {
   inString=inString.Trim();
   bool haveNumber=false;
   bool haveDot=false;
   for(int i=0;i<inString.Length;i++)
   {
    if (Char.IsNumber(inString[i]))
    {
     haveNumber=true;
    }
    else if(inString[i].ToString() == ".")
    {
     if (haveDot)
     {
      return false;
     }
     else
     {
      haveDot=true;
     }
    }
    else if(i==0)
    {
     if(inString[i].ToString() !="+" && inString[i].ToString() != "-")
     {
      return false;
     }
    }
    else
    {
     return false;
    }
    if(i>20)
    {
     return false;
    }
   }
   return haveNumber;
  } 

#6


// 标准数字格式字符串用法说明及举例
class NumberFormat
{
  static void Main()
  {
    // {index[,alignment][:format]}
    // index     - 从零开始的整数,指示对象列表中要格式化的元素。
    // alignment - 可选整数,指示最小宽度,不足部分用空格填充。负数指示左对齐,正数指示右对齐。
    // format    - 格式字符串。标准数字格式字符串采取“Axx”形式,A为单个字母, 说明如下:
    //    c - 货币,     xx指示小数位数
    //    d - 十进制,   xx指示有效位数, 不足用零填充, 只能用于整数
    //    x - 十六进制, 用法同d
    //    e - 指数,     xx指示小数位数
    //    f - 固定点,   xx指示小数位数
    //    n - 数字,     输出千位分隔符, 其余同f
    //    g - 常规,     xx指示有效位数, 使用e或f中较短者
    //    p - 百分比,   xx指示小数位数
    // 例如以下语句的输出为: "|¥-5.00|-05| -05|-5.0 |-500%|12345.7|12,345.7|"
    System.Console.WriteLine("|{0:c}|{0:d2}|{0,4:d2}|{0,-5:f1}|{0:p0}|{1:f1}|{1:n1}|", -5, 12345.67);
  }
}

#7


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;
    }

#8


但是当object="123"时,它是字符串对象,不应该是数字

#9


一个个的判断也不是很复杂,毕竟数字类型是有限的
public static bool IsNumeric(object AObject)
{
    return AObject is sbyte || AObject is byte ||
        AObject is short || AObject is ushort ||
        AObject is int || AObject is uint ||
        AObject is long || AObject is ulong ||
        AObject is double || AObject is char ||
        AObject is decimal || AObject is float ||
        AObject is double;
}

#10



object str="3343ffff";
        string  newstr = str.ToString();
 for (int i = 0; i<newstr .Length;i++ )
        {
            if (char.IsNumber(newstr , i))
            {
               --是数字类型!;
return;
            }
            else
            {
               --不是数字类型!;
return;
            }
           
        }

#11


object obj = "xxx";
try
{
    Convert.ToDecimal(obj);
    return true;
}
catch(Exception)
{
    return false ;
}

#12


呵呵,楼上的方法是比较常用的,硬来不行那就不是数字了呗~  

#13


其实只要这样: 判断这个object能否转换为decimal, 可以说明是数字, 否则不是
所以9楼的代码 可以简化为
public static bool IsNumeric(object AObject)
{
    return (AObject as decimal) != null;
}

个人观点 不一点正确呵呵

#14


mark