类型自动转换规则

参与运算(算术运算和赋值运算)的操作数结果类型必须一致,当不一致时满足下面条件,系统自动完成类型转换.


1,两种类型兼容,例如:int和double兼容. (都同为数字)

double number=3;   //前面我们定义的类型为double,但是注意我们赋值却是一个int值:3,系统自动转换成double类型3.0,所以程序在这里不会报错.

Console.WriteLine("{0}",number);

Console.ReadKey();


2,目标类型大于源类型,例如:double>int.(double范围远远大于int类型)

double pi=3.14;

double r=5; //两种类型兼容系统自动完成类型转换成double类型5.0

double area=r*r*pi;// r*r结果为int*pi(double),由于取值范围double大于int,在转换后不会丢失精度,所以在此处值为double类型[先将r*r值结果直接加.0转为double*pi(double),将最终为double的结果值赋给了double area]

Console.WriteLine("面积={0}",area);

Console.ReadKey();


 

3,对于表达式,如果一个操作数为double类型,则整个表达式可提升为double类型

int number1=10,number2=3;

int ys=number1%number2;

double quo=1.0*number1/number2;//注意此处如果不加1.0*输出结果是3.因为2个int类型的数相除结果还是int只是得出int类型的结果后系统加.0转为double.如果前加1.0*就是变成一个double类型的/一个int类型的结果就是double类型的 所以输出结果是3.333333333 如果一个操作数为double类型,则整个表达式可提升为double类

Console.WriteLine("取余数={0}\n{1}",ys,quo);

Console.ReadKey();


 

 

同理:

如下

1,decimal number=3.14; //这里是无法将double类型的数值自动转换成deicmal类型的值,因为double的取值范围比decimal大。只能取值范围小的赋给大的

正确写法应该是

decimal number=3.14m;


 

2,

decimal number=3.14m;

double number2=number;//这里也是无不将decimal值赋值给double的,虽说double取值范围比decimal大,但是double取值精度没有decimal的高。转换后会丢失精度所以不能转换。这里程序也会自动报错.


 

3,

decimal number=3 //此处是可以将int类型的转化成decimal类型的

 

posted @ 2016-04-04 23:02  思维乐趣  阅读(1504)  评论(0编辑  收藏  举报