【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);
posted @ 2012-08-27 20:48  richardzeng  阅读(718)  评论(0编辑  收藏  举报