A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© u010209195 高级黑马   /  2013-12-15 08:54  /  1954 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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.         }
复制代码

输出结果为:

评分

参与人数 1技术分 +2 收起 理由
V_John + 2 很给力!

查看全部评分

7 个回复

倒序浏览
输出结果为附件图:

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

3~4测试

3~4测试

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

5~6测试

5~6测试
回复 使用道具 举报
本帖最后由 u010209195 于 2013-12-15 13:59 编辑

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

共同努力,我还是不知道里面的原理是什么,只是自己试了试,看运行的结果;{:3_57:}
回复 使用道具 举报
全部都是四舍五入
回复 使用道具 举报
学习了,:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马