没有天花板或地板的C ++舍入数字

时间:2015-03-23 09:59:05

标签: c++ casting rounding

我正在尝试DS Malik的 C ++编程中的以下问题:从问题分析到程序设计

第2章,问题7

  

编写一个程序,提示用户输入一个十进制数字和   输出四舍五入到最接近的整数。

我的计划到目前为止

 #include <iostream>

 using namespace std:cout;
 using namespace std:cin;

 int main()
  {
    double decimalNum;
    cout << "Please enter a decimal number: ";
    cin >> decimalNum;
    return 0;
  }

是否可以在不使用地板或天花板的情况下将数字舍入为整数?请注意,我刚刚开始使用C ++编程,所以请不要过于复杂。

3 个答案:

答案 0 :(得分:2)

正如评论中所指出的,添加0.5并将其强制转换为int

添加0.5背后的原因是为了确保数字被舍入而不是被截断的小数部分。因此,6.6将被截断为6,但会四舍五入为7

类型转换是更改类型的过程。某些类型彼此兼容,但不同。例如,intfloatdoublelong都代表数字。因此,当您编写int + float时,编译器会首先自动将int转换为float,然后执行操作。这称为类型转换。你可以明确地做,或者编译器多次这样做。

因此,要将其包装起来,添加0.5将帮助您正确地完成,并且类型转换将改变类型。

答案 1 :(得分:2)

您可以尝试以下代码 -

#include <iostream>

using namespace std;

int main()
{
    double decimalNum;
    cout << "Please enter a decimal number: ";
    cin >> decimalNum;
    int roundNum = decimalNum + 0.5;
    cout << "The nearest rounded number : " << roundNum << endl;
    return 0;
}

答案 2 :(得分:0)

添加0.5然后调用modf可能是您最好的选择 - 整数部分返回为double,因此您仍然可以获得超出64位整数类型范围之外的数字的正确结果。 cmath header还提供了许多其他选项。