黑马程序员技术交流社区

标题: 关于数据类型自动转换的疑问 [打印本页]

作者: 黑骏马    时间: 2013-7-24 00:49
标题: 关于数据类型自动转换的疑问
本帖最后由 黑骏马 于 2013-7-24 21:56 编辑

基础视频里老师讲
算术运算和赋值运算,操作数和结果的类型一致,不一致刚在满足条件时发生自动(隐式)转换。
  1. int a = 10;
  2. int b = 3;
  3. double q = a/b;
  4. Console.WriteLine(q);
  5. Console.ReadKey();
复制代码
输出的结果是3 不是3.0或3.333333


看到黑马同学帕格尼尼的眼泪 的一个帖子后我查了下MSDN,关于自动转换是这么说的:
隐式转换

对于内置数值类型,如果要存储的值无需截断或四舍五入即可适应变量,则可以进行隐式转换。 例如,long类型的变量(8 字节整数)能够存储 int(在 32 位计算机上为 4 字节)可存储的任何值。 在下面的示例中,编译器先将右侧的值隐式转换为 long 类型,再将它赋给 bigNum

  1. <span style="line-height: 1.5;">int num = 2147483647;</span>
  2. long bigNum = num;
复制代码
也就是double q = a/b; 编译器先把右侧a/b的值隐式转换为double类型,再将它赋给q
a/b的值是int型的3,转换为double应该是3.0,但为什么输入的还是3呢?


--------------------------------------
明白了,WriteLine()在输出double类型数据时会调用double的ToString()方法,于是3.0被标准化输出显示为3.
如有需要,可以使用控制符来控制输出格式。

{:soso_e183:}谢谢各位的回答!

作者: changvh    时间: 2013-7-24 07:48
首先a/b的结果是个int类型,结果为3,然后转为double类型,然后输出是3而不是3.0什么的,是你没有控制输出的格式,WriteLine里面会调用double的tostring方法,但是你可以控制输出的格式,例如Console.WriteLine("{0:f}", q);
作者: 王云峰    时间: 2013-7-24 15:03
a/b是double类型,计算出来的q也是double类型,但是输出的时候是q.tostring(),所以显示的是3而不是3.0或3.33....
作者: 彭家贰小姐    时间: 2013-7-24 17:40
本帖最后由 彭家贰小姐 于 2013-7-24 17:42 编辑

http://bbs.itheima.com/forum.php?mod=viewthread&tid=60812&extra=page%3D1%26filter%3Dtypeid%26typeid%3D232%26typeid%3D232
你和这个帖子的问题是一样的。。。





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