黑马程序员技术交流社区

标题: int类型转换两种方式的区别时什么? [打印本页]

作者: 郭正续    时间: 2012-7-30 07:51
标题: int类型转换两种方式的区别时什么?
将用户输入的内容转换成int类型时候,假如能转换成功的话,用convert.Toint32();和int.Parse();哪个语句好,这俩有什么区别啊?
作者: 张腾达    时间: 2012-7-30 08:06
Convert.ToInt32();可以转换的类型很多,bool值,Char,Decimal,DateTime等等很多都可以,
int.Parse();只能转换string类型。

当然这都是在你说的“假如能转换成功的话”的前提下。
Convert.ToInt32()转换null值返回为0,转换空字符串会抛出异常;
int.Parse();转换null和空字符串都会抛出异常。

如果仅仅转换字符串的时候,那么建议使用int.TryParse();它和int.Parse很像,但它不会产生异常,转换成功返回 true,转换失败返回 false。最后一个参数为输出值,如果转换失败,输出值为 0
作者: 唐兰文    时间: 2012-7-30 10:23
在使用Convert.ToInt32( value)时还需要注意一点,如果value 为两个整数中间的数字,则返回二者中的偶数;即 3.5转换为4,4.5 转换为 4,而 5.5 转换为 6。不过4.6可以转换为5,4.4转换为4。
注意:在使用强制转换(int)时,int(4.6) = 4,Int转化其他数值类型为Int时没有四舍入.
作者: 蔡尚猛    时间: 2012-7-30 10:27
我感觉convert.Toint32();比较好些
int.Parse();据说底层还是convert的
作者: 李宏利    时间: 2012-7-30 12:06
两者都是把数据转换个int类型,区别其实不大,只是略微有一点:
区别在于:
如果你有一个字符串
string str=null;
int num=0;
num=Convert.ToInt32(str); //Covert.ToInt32()在null时不抛异常而是返回0
而num=int.Parse(str);是要抛出异常的。
还有int.Parse的值要高于Convert.ToInt32.

另外还有一个int.TryParse()不会抛出异常,会返回一个true或者false来说明解析是否成功。也就是说它往往只是用来判断能不能把种非int类型的值转换成int类型
作者: 刘玉    时间: 2012-7-30 13:57
没多大区别,convert.Toint32()其实还是调用的int.Parse();
作者: 许庭洲    时间: 2012-7-30 13:59
1,Int.Parse(参数) 语句,针对字符串;
2,Convent.Toint32(参数)语句,针对所有数据类型;
3,Convert.ToInt32(null);//返回0
4,int.Parse(null);//程序产生异常
5,a. Convert.ToInt32(double value),如果 value 为两个整数中间的数字,返回二者中的偶数;
     例如:b. int.Parse("3.5") ;//输出4
              b. int.Parse("4.5") ;//输出4
6,b. int.Parse("1.5"); //直接报错,程序异常提示输入字符串的格式不正确。
作者: 王峰    时间: 2012-7-30 14:12
如果输入内容可以转换,Convert.ToInt32()转换null值返回为0,转换空字符串会抛出异常;
int.Parse();转换null和空字符串都会抛出异常
作者: 黑马—代忠    时间: 2012-7-30 15:05
(int)和Int32.Parse(),Convert.ToInt32()三者的区别:

第一个在对long 类型或是浮点型到int 类型的显式强制转换中使用,但是如果被转换的数值大于 Int32.MaxValue 或小于 Int32.MinValue,那么则会得到一个错误的结果。

第二个在符合数字格式的 string 到 int 类型转换过程中使用,并可以对错误的 string 数字格式的抛出相应的异常。

第三个则可以将多种类型的值转换为 int 类型,也可以对错误的数值抛出相应的异常。

无论进行什么类型的数值转换,数值的精度问题都是我们必须考虑的

作者: 吴清华    时间: 2012-7-30 20:30
convert.toint32(null)返回0,不会抛出异常,可以转换不同的类型。int.parse()只是针对字符串的。
作者: ARMdong    时间: 2012-7-31 12:29
Convert.ToInt32()转换时态度强硬一点,而int.Parse()则没有前者那么强硬,而且Convert能转换的种类也就很多,如string,Int16,Int32等等……
作者: Suko    时间: 2012-7-31 22:42
如果你是从String类型转换成int类型,请最好用int.TryParse。Convert.ToInt32的转换参数可以是多样的,但是谨记try catch 捕获异常。
作者: 郭张浩    时间: 2012-8-1 13:39
我总结下:
1. 可转换类型的不同
Convert.ToInt32()几乎可以把各种类型(包括object 引用类型)的值转换为int类型。
int.Parse()只能转化string。
2. 对null的处理
Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常。
3.       对浮点数的处理
Convert.ToInt32(double value)
如果 value 为两个整数中间的数字,则返回二者中的偶数;即3.5转换为4,4.5 转换为4,而5.5转换为6。不过4.6可以转换为5,4.4转换为4
int.Parse("4.5")
运行的时候报错:"输入字符串的格式不正确".
4性能方面
差别不大

作者: 张寅平    时间: 2012-8-1 15:16
Convert.ToInt32()可以转换的类型较多,也就是它的重载较多,如:double、char、string、datetime等;而int.Parse()只能转换数字字符串。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2