变量值之间的差异

Afa*_*faq 2 c# casting

我编写了一个代码来检查C#中的类型转换.以下代码:

using System;
class Convert{
    public static void Main(){
        double a=14.25,b=26.12;
        var z=(int)(a*b);
        Console.WriteLine("z= "+z);
        Console.ReadKey(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

给出输出:

z=372
Run Code Online (Sandbox Code Playgroud)

但是当我修改代码时,我之前和修改后的z值之间有很大差异.

using System;
    class Convert{
        public static void Main(){
            double a=14.25,b=26.12;
            var z=(int)a*b;  // Modified part
            Console.WriteLine("z= "+z);
            Console.ReadKey(true);
        }
    }
Run Code Online (Sandbox Code Playgroud)

给出输出:

z=365.68
Run Code Online (Sandbox Code Playgroud)

我不明白为什么从原始代码中删除括号后会有这么大的差异?

SLa*_*aks 7

没有外括号,(int)演员表仅适用于a.
因此,你最终通过正常的双截断整数相乘,和类型推断转vardouble.

使用括号,强制转换应用于乘法的结果.因此,整个结果被截断,类型推断变成varint.


因此,改变vardouble会对两个例子中没有任何影响.(在第二种情况下,它将会分配截短int到一个double变量)

更改varint将第二个示例变为编译器错误.