我编写了一个代码来检查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)
我不明白为什么从原始代码中删除括号后会有这么大的差异?
没有外括号,(int)演员表仅适用于a.
因此,你最终通过正常的双截断整数相乘,和类型推断转var成double.
使用括号,强制转换应用于乘法的结果.因此,整个结果被截断,类型推断变成var了int.
因此,改变var到double会对两个例子中没有任何影响.(在第二种情况下,它将会分配截短int到一个double变量)
更改var为int将第二个示例变为编译器错误.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |