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