我觉得这很愚蠢,因为我知道怎么做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。或者这可能是书中的拼写错误?
答案 0 :(得分:28)
static_cast<int>(n+0.5)
或static_cast<int>(n >= 0 ? n + 0.5 : n - 0.5)
了解否定n
的正确行为。
答案 1 :(得分:3)
您知道,这对您的编译器来说不是问题。在C ++中,当您将float转换为整数类型时,该值始终被截断。