如何将Qt中的int舍入到最接近的5

时间:2016-02-14 11:11:00

标签: qt math int rounding

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

e.g:

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

等等

2 个答案:

答案 0 :(得分:2)

通过C ++将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;
}

我觉得这个公式最简单。

答案 1 :(得分:1)

这是一个可能的解决方案:

#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框架是否提供了开箱即用的类似功能,但它只是一行功能,您可以轻松自己编写。