舍入为static_cast <int>?</int>

时间:2010-02-05 05:19:15

标签: c++ casting

我觉得这很愚蠢,因为我知道怎么做101方式,但不是书中定义的方式。 (注意,我知道C ++)

到目前为止,我们只讨论了C ++的基础知识。所以基本上,我们知道变量,赋值和基本的转换。

在书中我遇到了这部分问题:

  • 提示用户输入小数
  • 将该数字转换为最近的整数并将其打印到屏幕

所以我有一些简单的代码:

double n;
cout<<"Number: ";
cin >> n;
cout <<endl<<static_cast<int>(n)<<endl;

但我意识到这对我不起作用。它将始终截断小数,以便1.9 - &gt; 1而不是预期的1.9 - > 2

如何使用我所知道的内容解决这个问题? (如,没有round()或if语句等)

这是标准合规性问题吗?在学校我思考我在Windows XP 32位上使用Visual C ++ 2005时有类似的东西,但是现在我在家里尝试做同样的事情并且它不起作用。我的家编译器是OpenBSD 64bit上的gcc 3.3.5。或者这可能是书中的拼写错误?

2 个答案:

答案 0 :(得分:28)

static_cast<int>(n+0.5)

static_cast<int>(n >= 0 ? n + 0.5 : n - 0.5)了解否定n的正确行为。

答案 1 :(得分:3)

您知道,这对您的编译器来说不是问题。在C ++中,当您将float转换为整数类型时,该值始终被截断。