【DotNet 技能系列】3. C#中算术运算符、赋值运算符与类型转换
规则:算术运算符和赋值运算符参与运算的两边的操作数必须相同,并且操作结果为操作数类型相同。
// int 和 double 类型的算术运算比较
int num1 = 10; int num2 = 3; int mod = num1 % num2; //1 // 这里先进行除法运算后得到int类型,然后int类型自动转换成double类型 double result = num1 / num2; //3 Console.WriteLine("{0} % {1} = {2}", num1, num2, mod); Console.WriteLine("{0} / {1} = {2}", num1, num2, result); double num3 = 10; double num4 = 3; // 这里先进行除法运算后得到double类型,所以与int类型的除法运算结果不一样 double result2 = num3 / num4; //3.333... Console.WriteLine("{0} / {1} = {2}", num1, num2, result2);
当不一致时,满足下面条件时,系统自动完成类型转换
- 两边类型兼容,比如int和double兼容
- 目标类型大于源类型
也就是说两边类型不一致的时候不是不能运算,而是要看是否符合自动转换的规则。
自动转换:自动转换从低的往高的转,自动转换不丢失精度。如果转换时可能会丢失精度,系统不会自动转换,而是给编译错误,给程序员自己去强制转换。
1. int 能向float,double转,int的范围最小(+-10次方左右),double(+-308次方左右)
2. decimal和double不能转换,因为精度不一样的原因
注意:这里的转换只会根据类型来判断,也就是double类型始终不能自动向int转换,不管变量的值的大小是否超过int的范围。
技巧:
1. 如果要把一个算式从int转换成double运算,只要其中一个是double类型,所有的类型运算就是double类型的.
double result = num1 * 1.0 / num2; // 这里的结果也是3.33。。。。
double result2 = (double) num1 / num2; // 强制转换
2. 丢失进度的强制转换,不一定是没有意义的。比如收银时,有时候会只收整数,而不收分数。
// 丢失精度的应用场景 int money = (int)99.12; //99 Console.WriteLine(money);
3. 数据类型转换类:Convert.ToInt32
int ipi = Convert.ToInt32(3.14); Console.WriteLine(ipi);
int ipi2 = Convert.ToInt32("10"); Console.WriteLine(ipi2);
int ipi2 = Convert.ToInt32("3.14"); // 运行时错误,FormatException Console.WriteLine(ipi2);