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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑骏马 中级黑马   /  2013-7-24 00:49  /  1304 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑骏马 于 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:}谢谢各位的回答!

3 个回复

倒序浏览
首先a/b的结果是个int类型,结果为3,然后转为double类型,然后输出是3而不是3.0什么的,是你没有控制输出的格式,WriteLine里面会调用double的tostring方法,但是你可以控制输出的格式,例如Console.WriteLine("{0:f}", q);
回复 使用道具 举报
a/b是double类型,计算出来的q也是double类型,但是输出的时候是q.tostring(),所以显示的是3而不是3.0或3.33....
回复 使用道具 举报
本帖最后由 彭家贰小姐 于 2013-7-24 17:42 编辑

http://bbs.itheima.com/forum.php?mod=viewthread&tid=60812&extra=page%3D1%26filter%3Dtypeid%26typeid%3D232%26typeid%3D232
你和这个帖子的问题是一样的。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马