1

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

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

当答案是 25 时,我得到了一个不正确的值 26。

但是,当我在双打上使用静态强制转换时,我得到的正确答案是 25。

如何解释错误的输出?

4

2 回答 2

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

当您在添加之前进行转换时,您将添加10and 15,这会导致25:)

于 2008-11-24T00:07:22.130 回答
2

实际上,在进行自动转换时,您不能依赖浮点数来舍入任何一种方式。如果 26.0 用 26.00005 表示,则四舍五入为 26,如果用 25.999995 表示,则四舍五入为round25 math.h。这么说,26.0 变成 26并不完全正确。

于 2008-11-24T01:38:18.343 回答