首页 > 编程 > C# > 正文

Convert.ToInt32小数为什么会异常

2019-10-29 21:31:06
字体:
来源:转载
供稿:网友
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分)---------
使用Int32.TryParse()
------其他回答(1分)---------
引用 1 楼 peter200694013 的回复:
使用Int32.TryParse()
然后parse不了
------其他回答(1分)---------
你可以ToDouble,然后强转。
------其他回答(2分)---------
有小数发生异常自然是正常的,因为它不符合整数的形式嘛。
------其他回答(1分)---------
引用 5 楼 dancingbit 的回复:
有小数发生异常自然是正常的,因为它不符合整数的形式嘛。
+1
------其他回答(1分)---------
你要它ToInt32,但提供的字符串不符合Int32的形式,为什么不能发生异常?
不要忘了,计算机的聪明来自于哪里。
------其他回答(2分)---------
异常 条件  
FormatException value 不是由一个可选符号后跟数字序列(0 到 9)组成的。  
OverflowException value 表示小于 MinValue 或大于 MaxValue 的数字。  
 
看msdn
toDouble
------其他回答(1分)---------
难道你认为"0.1"是整数吗?
------其他回答(2分)---------
翻看.net源码就可以找到你想要的东西。
------其他回答(2分)---------
引用 11 楼 hyx972 的回复:
引用 9 楼 mohugomohu 的回复:
难道你认为"0.1"是整数吗?
我的理解,不知道对不对:
Convert.ToInt32 强制转换,无论源数据是否是整形,只要他是数值就可以了。
明显不对,ToInt32要求被转换的字符串要符合整数的形式的。
------其他回答(1分)---------
double类型的不能转换为int类型的
------其他回答(1分)---------
引用 13 楼 dancingbit 的回复:
引用 11 楼 hyx972 的回复:
引用 9 楼 mohugomohu 的回复:
难道你认为"0.1"是整数吗?
我的理解,不知道对不对:
Convert.ToInt32 强制转换,无论源数据是否是整形,只要他是数值就可以了。
明显不对,ToInt32要求被转换的字符串要符合整数的形式的。
+1
------其他回答(1分)---------
引用 15 楼 peter200694013 的回复:
引用 13 楼 dancingbit 的回复:
引用 11 楼 hyx972 的回复:
引用 9 楼 mohugomohu 的回复:
难道你认为"0.1"是整数吗?
我的理解,不知道对不对:
Convert.ToInt32 强制转换,无论源数据是否是整形,只要他是数值就可以了。
明显不对,ToInt32要求被转换的字符串要符合整数的形式的。
+1
你的理解,顶个屁用.人家MS就是这样规定的.
------其他回答(1分)---------
改个转换的方式吧
------其他回答(1分)---------
引用 4 楼 hyx972 的回复:
我想知道为什么 Convert.ToInt32("0.1")会产生异常?
难道.Net框架下提供那么多的重载的方法都是忽悠人的?
你这个参数是字符串吧?
------其他回答(1分)---------
是字符串的话就会报错,
------其他回答(1分)---------
.....
有小数的东西。。你非得拿整型转。。
------其他回答(1分)---------
用(int)转换吧
------其他回答(1分)---------
csdn神奇的人真多
------其他回答(1分)---------
是啊 0.1明显不是整形啊
------其他回答(1分)---------
有小数当然不能用int类型了 用double
------其他回答(2分)---------
先转decimal,然后Math.Floor()
------其他回答(1分)---------
小数的"."
不符合整数格式
int a = Convert.ToDouble("0.1");
这样就好了
------其他回答(2分)---------
LZ先把字符串转换为Double类型再转为Int32就没问题了,原因是如果像LZ那样转的话,会是被认为由字符串转为整形,当有小数点时就会出错了,如果先转换为Double类型的话就会以数值类型来处理。如:Int32 i = Convert.ToInt32(Convert.ToDouble("1.1"));这样就可以通过了
------其他回答(1分)---------
这个不神奇,一个是decimal的转换为int,这个可以的;
下一个是string型的转换为int,这样string的内容必须为符合整型的格式。
这两个语句不等价的。
引用 10 楼 hyx972 的回复:
decimal dPX_QYZJ;
int iVal;
dPX_QYZJ = 1.12;
iVal = Convert.ToInt32 ( dPX_QYZJ ); //OK
iVal = Convert.ToInt32 ( dPX_QYZJ.ToString() ); //Error
真是神奇的VS2005 C# 
本段代码在VS2005 VB 中一切正常!
……
------其他回答(1分)---------
如果不是整数就会报一场
------其他回答(3分)---------
不要把VB中的用在c#不然会有很多的错误。。。。。
跟VB差别 蛮大的
------其他回答(1分)---------
强转 (int)row.Cells[4].Value
------其他回答(1分)---------
row.Cells[4].Value 可能是字符串(里面含有空格字符串)
你仔细看一下
------其他回答(1分)---------
有点偏执了....
------其他回答(1分)---------
kankankan
------其他回答(1分)---------
确实,哪来的那么多为什么
------回答---------

------其他回答(1分)---------

使用Int32.TryParse()
------其他回答(1分)---------
引用 1 楼 peter200694013 的回复:
使用Int32.TryParse()

然后parse不了
------其他回答(1分)---------

你可以ToDouble,然后强转。
------其他回答(2分)---------

有小数发生异常自然是正常的,因为它不符合整数的形式嘛。
------其他回答(1分)---------
引用 5 楼 dancingbit 的回复:
有小数发生异常自然是正常的,因为它不符合整数的形式嘛。

+1
------其他回答(1分)---------

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

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

难道你认为"0.1"是整数吗?
------其他回答(2分)---------

翻看.net源码就可以找到你想要的东西。
------其他回答(2分)---------
引用 11 楼 hyx972 的回复:
引用 9 楼 mohugomohu 的回复:
难道你认为"0.1"是整数吗?
我的理解,不知道对不对:
Convert.ToInt32 强制转换,无论源数据是否是整形,只要他是数值就可以了。

明显不对,ToInt32要求被转换的字符串要符合整数的形式的。
------其他回答(1分)---------

double类型的不能转换为int类型的
------其他回答(1分)---------
引用 13 楼 dancingbit 的回复:
引用 11 楼 hyx972 的回复:
引用 9 楼 mohugomohu 的回复:
难道你认为"0.1"是整数吗?
我的理解,不知道对不对:
Convert.ToInt32 强制转换,无论源数据是否是整形,只要他是数值就可以了。
明显不对,ToInt32要求被转换的字符串要符合整数的形式的。

+1
------其他回答(1分)---------
引用 15 楼 peter200694013 的回复:
引用 13 楼 dancingbit 的回复:
引用 11 楼 hyx972 的回复:
引用 9 楼 mohugomohu 的回复:
难道你认为"0.1"是整数吗?
我的理解,不知道对不对:
Convert.ToInt32 强制转换,无论源数据是否是整形,只要他是数值就可以了。
明显不对,ToInt32要求被转换的字符串要符合整数的形式的。
+1

你的理解,顶个屁用.人家MS就是这样规定的.
------其他回答(1分)---------

改个转换的方式吧
------其他回答(1分)---------
引用 4 楼 hyx972 的回复:
我想知道为什么 Convert.ToInt32("0.1")会产生异常?
难道.Net框架下提供那么多的重载的方法都是忽悠人的?

你这个参数是字符串吧?
------其他回答(1分)---------

是字符串的话就会报错,
------其他回答(1分)---------

.....
有小数的东西。。你非得拿整型转。。
------其他回答(1分)---------

用(int)转换吧
------其他回答(1分)---------

csdn神奇的人真多
------其他回答(1分)---------

是啊 0.1明显不是整形啊
------其他回答(1分)---------

有小数当然不能用int类型了 用double
------其他回答(2分)---------

先转decimal,然后Math.Floor()
------其他回答(1分)---------

小数的"."
不符合整数格式
int a = Convert.ToDouble("0.1");
这样就好了
------其他回答(2分)---------

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

这个不神奇,一个是decimal的转换为int,这个可以的;
下一个是string型的转换为int,这样string的内容必须为符合整型的格式。
这两个语句不等价的。
引用 10 楼 hyx972 的回复:
decimal dPX_QYZJ;
int iVal;
dPX_QYZJ = 1.12;
iVal = Convert.ToInt32 ( dPX_QYZJ ); //OK
iVal = Convert.ToInt32 ( dPX_QYZJ.ToString() ); //Error
真是神奇的VS2005 C# 
本段代码在VS2005 VB 中一切正常!
……
------其他回答(1分)---------

如果不是整数就会报一场
------其他回答(3分)---------

不要把VB中的用在c#不然会有很多的错误。。。。。
跟VB差别 蛮大的
------其他回答(1分)---------

强转 (int)row.Cells[4].Value
------其他回答(1分)---------

row.Cells[4].Value 可能是字符串(里面含有空格字符串)
你仔细看一下
------其他回答(1分)---------

有点偏执了....
------其他回答(1分)---------

kankankan
------其他回答(1分)---------

确实,哪来的那么多为什么
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表