由不一致引起的static_cast混淆

时间:2008-11-24 00:03:43

标签: c++ casting double int

为什么每当我在Visual Studio 2008中编译并运行以下代码时:

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2;
Console::WriteLine(whole_number);

我得到的错误值为26而答案是25。

然而,当我在双打中使用静态强制转换时,我得到了正确的答案,即25。

如何解释错误的输出?

2 个答案:

答案 0 :(得分:9)

这是绝对正确的。

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2; // int whole_number = 26.0;
Console::WriteLine(whole_number);

你会期待什么呢?编译器首先评估右侧,然后隐式转换为int。因此,26.0变为26

在您添加之前进行投射,然后您将添加1015,这会产生25:)

答案 1 :(得分:2)

实际上,在进行自动转换时,您不能依赖浮点数来绕过任何一种方式。如果26.0由26.00005表示,它将四舍五入为26,如果它由25.999995表示,则将四舍五入为25.如果您想确定,请使用round中定义的标准C函数math.h。 1}}。说因此,26.0变为26 不太正确。