gpt4 book ai didi

c# - 如何将装箱的 double 类型转换为整型值类型?

转载 作者:太空宇宙 更新时间:2023-11-03 12:21:25 25 4
gpt4 key购买 nike

我正在阅读一本旨在通过 Microsoft 考试 70-483 的书,但我在以下问题上遇到了一些困难:

以下代码被装箱到对象 o 中。

double d = 11.5;
object o = d;

你被要求将对象 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

按照书上的说法,正确答案是C,但我不明白为什么选项b是错误的。当我尝试同时运行它们时,结果是一样的。 B选项和C选项有区别吗?你有什么看法?

最佳答案

在您给出的示例中,选项 B 完全没问题。

选项 A:您不能装箱和拆箱不同的类型。这将导致 InvalidCastException

选项 B:完全没问题。 o 将在 double 中拆箱。之后它将被(显式)转换为 integer

选项 C:与 B 类似,但在将其转换为整数之前,它将转换为 float 。结果将保持不变。绝对不需要从 double 转换为 float。它总是会被截断。但也有边缘情况! (见下文)

选项 D:不能使用从 float 到 int 的隐式转换。与 A 相同:InvalidCastException

那么为什么选择 C?在某些情况下,将 double 舍入为 int 不同于将 float 舍入为 int。见下文answer来自 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();
}

输出将是:

12344322
12344321

如您所见,首先转换为 float 将导致不同的结果。请记住,这些都是边缘情况,很可能是学术问题。

关于c# - 如何将装箱的 double 类型转换为整型值类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46999736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com