【发布时间】:2011-05-20 03:46:03
【问题描述】:
这段代码运行良好
float ff = 5.5f;
int fd = (int) ff;
Console.Write(fd);
这段代码没有
float ff = 5.5f;
object jf = ff;
int fd = (int) jf;
Console.Write(fd);
跑步者中的什么规则导致这种情况发生?
【问题讨论】:
这段代码运行良好
float ff = 5.5f;
int fd = (int) ff;
Console.Write(fd);
这段代码没有
float ff = 5.5f;
object jf = ff;
int fd = (int) jf;
Console.Write(fd);
跑步者中的什么规则导致这种情况发生?
【问题讨论】:
您可以将浮点数转换为 int,但不能将 boxed 浮点数转换为 int - 您必须先将其拆箱。
int fd = (int)(float)jf;
阅读 Eric Lippert 的帖子 Representation and Identity 了解更多详情。
【讨论】:
float ff = 5.5f;
object jf = ff;
int fd = (int) jf;
当您从 float 装箱到 object 时,实际类型 jf 是 float 并且您将装箱的 float 直接拆箱为运行时不接受的 int。
所以您需要先拆箱以浮动,然后再次转换为 int。
【讨论】: