使用static_cast <int>舍入?

Ear*_*rlz 17 c++ casting

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

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

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

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

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

double n;
cout<<"Number: ";
cin >> n;
cout <<endl<<static_cast<int>(n)<<endl;
Run Code Online (Sandbox Code Playgroud)

但我意识到这对我不起作用.它总是截断小数,使1.9 - > 1而不是预期的1.9 - > 2

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

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

eph*_*ent 31

static_cast<int>(n+0.5)

或者static_cast<int>(n >= 0 ? n + 0.5 : n - 0.5)对负面的更正确的行为n.

  • 请记住,如果源的值不适合目标,则将浮动类型转换为整数类型是未定义的行为.因此,如果用户输入"1.0e10",则任何事情都可能发生.如果你很幸运,你的编译器手册会告诉你什么.`ceil`和`floor`函数存在是有原因的;-) (5认同)