int iPX_QYZJ;
    
    iPX_QYZJ = Convert.ToInt32 (row.Cells[4].Value);row.Cells[4].Value返回object类型。当row.Cells[4].Value的值包含小数时,发送异常。row.Cells[4].Value值为整数时一切正常。开发环境:
VS2005 C#, WindowsXPSP3
机器中同时装有VS2003发生异常:
未处理 System.FormatException
  Message="输入字符串的格式不正确。"
  Source="mscorlib"

解决方案 »

  1.   

    我想知道为什么 Convert.ToInt32("0.1")会产生异常?难道.Net框架下提供那么多的重载的方法都是忽悠人的?
      

  2.   

    你要它ToInt32,但提供的字符串不符合Int32的形式,为什么不能发生异常?  不要忘了,计算机的聪明来自于哪里。
      

  3.   

    异常 条件 
    FormatException value 不是由一个可选符号后跟数字序列(0 到 9)组成的。 
    OverflowException value 表示小于 MinValue 或大于 MaxValue 的数字。 
     
    看msdn
    toDouble
      

  4.   

    decimal dPX_QYZJ;
    int iVal;dPX_QYZJ = 1.12;iVal = Convert.ToInt32 ( dPX_QYZJ  );             //OKiVal = Convert.ToInt32 ( dPX_QYZJ.ToString()  );  //Error真是神奇的VS2005 C# 本段代码在VS2005 VB 中一切正常!真TMD神奇!
      

  5.   

    我的理解,不知道对不对:
    Convert.ToInt32 强制转换,无论源数据是否是整形,只要他是数值就可以了。
      

  6.   

    翻看.net源码就可以找到你想要的东西。
      

  7.   


    明显不对,ToInt32要求被转换的字符串要符合整数的形式的。
      

  8.   

    double类型的不能转换为int类型的
      

  9.   

    有小数当然不能用int类型了 用double
      

  10.   

    小数的"."
    不符合整数格式
    int a = Convert.ToDouble("0.1");
    这样就好了
      

  11.   

    LZ先把字符串转换为Double类型再转为Int32就没问题了,原因是如果像LZ那样转的话,会是被认为由字符串转为整形,当有小数点时就会出错了,如果先转换为Double类型的话就会以数值类型来处理。如:Int32 i = Convert.ToInt32(Convert.ToDouble("1.1"));这样就可以通过了
      

  12.   

    这个不神奇,一个是decimal的转换为int,这个可以的;
    下一个是string型的转换为int,这样string的内容必须为符合整型的格式。
    这两个语句不等价的。
      

  13.   

    不要把VB中的用在c#不然会有很多的错误。。
    跟VB差别 蛮大的
      

  14.   

    强转 (int)row.Cells[4].Value
      

  15.   


    row.Cells[4].Value 可能是字符串(里面含有空格字符串)
    你仔细看一下
      

  16.   

     
     不搞了!
     
     需要在好好学习!
     
     Debug发现row.Cells[4].Value返回object类型被默认转成String了! 
      

  17.   

    (int)Convert.ToDecimal(row.Cells[4].Value)