Tou*_*reg 4 c# type-conversion
我正在阅读一本书以通过 Microsoft 考试 70-483,但我在以下问题上有点卡住了:
下面的代码被装箱到对象 o 中。
double d = 11.5;
object o = d;
Run Code Online (Sandbox Code Playgroud)
您需要将 object o 转换为 int。您应该在代码中使用什么选项?
int i = (int)o; //Option : A
int i = (int)(double)o; //Option : B
int i = (int)(float)(double)o; //Option : C
int i = (float)o; //Option : D
Run Code Online (Sandbox Code Playgroud)
根据书,真正的答案是 C,但我不明白为什么选项 b 是错误的。当我尝试运行它们时,结果是一样的。选项B和选项C有什么区别吗?你有什么意见?
在您给出的示例中,选项 B 完全没问题。
选项 A:您不能装箱和拆箱不同的类型。这将导致InvalidCastException.
选项B:完全没问题。o将在一个double. 之后它将被转换(显式)在一个integer.
选项 C:与 B 一样,但在将其转换为整数之前,将转换为浮点数。结果将保持不变。绝对不需要从 double 到 float 的转换。它总是会截断。但也有边缘情况!(见下文)
选项 D:不能使用从 float 到 int 的隐式转换。与 A 相同:InvalidCastException
那为什么是C?在某些情况下,将 double 舍入为 int 与将 float 舍入为 int 不同。请参阅下面的答案从supercat
您可以通过以下示例重现这一点:
static void Main(string[] args)
{
double val = 12344321.4999999991;
int a = (int)(float)val;
int b = (int)val;
Console.WriteLine(a);
Console.WriteLine(b);
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
输出将是:
12344322
12344321
Run Code Online (Sandbox Code Playgroud)
如您所见,首先转换为浮动会导致不同的结果。请记住,这些都是边缘情况,很可能是学术问题。
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |