舍入程序

Rounding Program

我需要使用 C++ 对一些输入数字进行舍入。下面是我的代码。 `

#include <iostream>
#include <math.h>
using namespace std;
int main() {
  int a;
  int b;
  int c;
  cin >> a;
  for (int i =0; i<a; i++) {
    cin >> b;
    cin >> c;
    int result = b/c;
    if (result > 0) {
      cout << floor(result + 0.5) << " ";
    } else {
      cout << ceil(result - 0.5) << " ";
    }
  }
}

然而,我总是得到太低的答案。

示例输入:

15
6525 1410
14431 510
9163 480
5461 1938
6969 1220
-7065150 -4171886
-9268414 -1461265
17913 584
-32381 -634679
19887 1666
5133363 4488942
5440267 601
4700414 923
4699610 15
4322342 201

输出:4 28 19 2 5 1 6 30 -0 11 1 9052 5092 313307 21504

预计:5 28 19 3 6 2 6 31 0 12 1 9052 5093 313307 21504

我做错了什么? (为什么我在其中一个上得到负零?)

您正在用整数而不是浮点数进行除法。您可以这样做来修复:

double result = static_cast<double>(b)/c;

最好也对 0 值使用 floor 以避免负零,即

if (result >= 0.0) {

另一个问题,除了作为整数除法进行除法外,正如另一个答案所指出的,您应该使用 std::round(3)。手动 adding/subtracting .5 容易出现舍入错误,当 std::round 会为您完成工作时,没有理由重新发明轮子。