黑马程序员——数据类型自动转换问题


---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

基础视频中,老师在讲数据类型自动转换时举了一个例子:

        static void Main(string[] args)
        {

            int a = 10;
            int b = 3;
            double c =1.0* a / b;

            System.Console.WriteLine(c);
            System.Console.ReadKey();
        }

控制台输出的结果为3 ,
由此引起包括我在内的许多同学的疑问:结果为什么是3而不是3.0或3.333……?


先来看一下自动转换(隐式转换)的解释:

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

int num = 2147483647;
long bigNum = num;

也就是说,对于视频里的例子double c = a/b; 编译器先把右侧a/b的值隐式转换为double类型,再将它赋给c 
a/b的值是int型的3,转换为double应该是3.0,但为什么输入的还是3呢?

这是因为WriteLine()会调用double的ToString()方法,3.0被标准化输出显示为3,实际上c的值仍为3.0


再问为什么值是3.0,而不是3.333……?

double c = a/b; a和b都为int型,计算结果c也为int型,值为3,再自动转换为double型,值为3.0,而不是3.3333……

怎样才能得到3.333……的值?

如果先将a和b转换为double型,则计算10.0/3.0结果会是3.333……

根据“表达式中如果有一个double类型,则整个表达式可提升为double类型”我们可以用下面的方法实现:

double c = 1.0 * a / b ; 

或 double c = (double)a / b ;

计算结果为3.333……,且控制台输出结果也显示为3.333……



----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值