黑马程序员技术交流社区

标题: Convert.ToInt32、Int.Parse和(int)的使用 [打印本页]

作者: u010209195    时间: 2013-12-15 08:54
标题: Convert.ToInt32、Int.Parse和(int)的使用
本帖最后由 u010209195 于 2013-12-15 09:13 编辑

1: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常。
2:对于double类型的数据
   a. Convert.ToInt32(double value)
   如果 value 为两个整数中间的数字,则返回二者中的偶数;即 3.5转换为4,4.5 转换为     4,而 5.5 转换为 6。  不过4.6可以转换为5,4.4转换为4
   b. int.Parse("4.5")   直接报错:"输入字符串的格式不正确".
   c. int(4.6) = 4
Int转化其他数值类型为Int时没有四舍五入,强制转换
int.Parse是转换String为int
Convert.ToInt32是转换继承自Object的对象为int的.
你得到一个object对象,你想把它转换为int,用int.Parse就不可以,要用Convert.ToInt32.

然后我自己写了三个静态方法来进行测试;
我的Convert.ToInt32(double i)的测试方法
  1.         /// <summary>
  2.         /// 我的Convert.ToInt32(double i)的测试方法
  3.         /// </summary>
  4.         /// <param name="i">double类型 i</param>
  5.         /// <returns>double类型</returns>
  6.         static double MyConvert(double i)
  7.         {
  8.             //返回值
  9.             return Convert.ToInt32(i);
  10.         }
复制代码

我的(int)(double i)强制类型转换测试方法
  1.         /// <summary>
  2.         /// 我的(int)(double i)强制类型转换测试方法
  3.         /// </summary>
  4.         /// <param name="i">double类型 i</param>
  5.         /// <returns>double类型</returns>
  6.         static double MyInt(double i)
  7.         {
  8.             //返回值
  9.             return (int)i;
  10.         }
复制代码

我自己的测试方法
  1.         /// <summary>
  2.         /// 我自己的测试方法
  3.         /// </summary>
  4.         /// <param name="i">double类型 i</param>
  5.         static void MyTest(double i)
  6.         {
  7.             string strConvert = string.Format("Convert.ToInt32({0})为:", i);
  8.             string strInt = string.Format("(int)({0})为:", i);
  9.             Console.WriteLine(strConvert + MyConvert(i));
  10.             Console.WriteLine(strInt + MyInt(i));
  11.             Console.WriteLine("-----------------------------------");
  12.         }
复制代码

在主函数中:
  1.         static void Main(string[] args)
  2.         {
  3.             //测试数字为:3.5、4.4、4.5、4.6、5.5、6.4、6.5、6.6
  4.             double[] dou = new double[] { 3.4, 3.5, 3.6, 4.4, 4.5, 4.6, 5.4, 5.5, 5.6, 6.4, 6.5, 6.6 };
  5.             foreach (double mydou in dou)
  6.             {
  7.                 MyTest(mydou);
  8.             }
  9.             Console.ReadKey();
  10.         }
复制代码

输出结果为:

作者: u010209195    时间: 2013-12-15 08:56
输出结果为附件图:

测试图1.jpg (61.61 KB, 下载次数: 146)

3~4测试

3~4测试

测试图2.jpg (60.71 KB, 下载次数: 151)

5~6测试

5~6测试

作者: u010209195    时间: 2013-12-15 09:02
本帖最后由 u010209195 于 2013-12-15 13:59 编辑

结论是不是这样的:
对于double类型的数据,1:一般情况下,使用Convert.ToInt32(double i)按照四舍五入的原则
                                             
                                        2:如果 value 为两个整数中间的数字,则返回二者中的偶数;即 3.5转换为4,4.5 转换为4,而 5.5 转换为 6。
不知道这样解释对不对??????
作者: chensc    时间: 2013-12-15 09:03
学习学习!
作者: u010209195    时间: 2013-12-15 09:19
chensc 发表于 2013-12-15 09:03
学习学习!

共同努力,我还是不知道里面的原理是什么,只是自己试了试,看运行的结果;{:3_57:}
作者: yuanlianxi03    时间: 2013-12-15 10:23
全部都是四舍五入
作者: jdedffjef83j    时间: 2014-12-7 15:19
学习了,:lol




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