将数字四舍五入到下一个最接近的5的倍数

5 c++

我需要将一个数字(输入保证为整数并为正数)舍入到下一个5的倍数.

我试过这个:

int round = ((grades[j] + 2)/5) * 5;
Run Code Online (Sandbox Code Playgroud)

但是,这会将数字四舍五入到最接近的5的倍数.

例如:67舍入到65而不是70.

EdC*_*ica 8

要整理一般表格应该是:

((n + denominator -1) / denominator )* denominator 
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下:

int round = ((grades[j] + 4)/5) * 5;
Run Code Online (Sandbox Code Playgroud)

我们从分母中扣除1的原因是为了处理舍入值的精确倍数,例如:

((70 + 4) / 5) * 5
Run Code Online (Sandbox Code Playgroud)

会屈服 70


CIs*_*ies 5

您可以grades[j]在下一个数字之间取差异,然后添加它.例如,如果grades[j] == 12那么12 mod 5 == 2,所以添加5 - 2.

这是一个测试它的示例程序:

#include <iostream>

int main() {
    int x[] = {2,7,123,32}; // some random numbers to show how this works
    for (int i = 0; i < 4; {
        std::cout << x[i] << "\t" << x[i] + ((5-(x[i] % 5)) % 5) << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

2   5
7   10
123 125
32  35
Run Code Online (Sandbox Code Playgroud)


fre*_*ish 5

int mod = grades[j] % 5;
int round = grades[j] - mod;
if (mod > 0) {
    round += 5;
}
Run Code Online (Sandbox Code Playgroud)