【问题标题】:How to round an int in Qt to the nearest 5如何将 Qt 中的 int 舍入到最接近的 5
【发布时间】:2016-05-25 06:46:39
【问题描述】:

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

例如:

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

等等

【问题讨论】:

标签: qt math int rounding


【解决方案1】:

在 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;
}

我觉得这个公式最简单。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 它工作得很好,现在我必须了解你在做什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2010-12-10
    • 2016-07-22
    相关资源
    最近更新 更多