---------------------- 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