如何将 Qt 中的整数四舍五入到最接近的 5

How to round an int in Qt to the nearest 5

我正在寻找一种将 Qt 中的整数四舍五入到最接近的 5 的好方法。

例如:

8 -> 10  
12 -> 10  
13 -> 15  
15 -> 15  
17 -> 15

等等

这里有一个可能的解决方案:

#include<iostream>

int toNearest5(int i) {
    int r = i%5, o = 0;

    if(r) {
        o = r/5. >= .5 ? 5 : 0;
    }

    return (i-r+o);
}

int main() {
    using namespace std;
    cout << toNearest5(8) << endl;
    cout << toNearest5(12) << endl;
    cout << toNearest5(13) << endl;
    cout << toNearest5(15) << endl;
    cout << toNearest5(17) << endl;
}

想法是获取数字并将其四舍五入到5的最小倍数(你可以通过去除余数来做到这一点),即:

int remainder = i%5;
int rounded = i - remainder;

现在,您可以检查余数,如果余数大于 2.5,则在四舍五入后的数字上加 5,否则加 0。
为了检查它,我将余数除以 5(其上限),以便在 [0,1[ 中得到一个数字并用 0.5 检查它以了解如何舍入原始数字。

它遵循同一函数的更紧凑版本:

int toNearest5(int i) {
    int j = i%5;
    return (i - j + (j/5. >= .5 ? 5 : 0));
}

我不知道 Qt 框架是否提供了类似的开箱即用的东西,但这是一行函数的问题,您可以轻松地自己编写它。

在 C++ 中舍入到最接近的整数通常通过以下方式完成:

static_cast<int>(number + 0.5);

现在,要将它四舍五入到下一个 5,我会将其带入我们可以应用此四舍五入规则的系统(即 5 -> 1、6 -> 1.2),然后将其带回系统5 真的是 5:

int roundToNearestFive(int number)
{
    return static_cast<int>(number / 5. + .5) * 5;
}

我觉得这个公式最简单。