2016-02-14 22 views
1

我要尋找一個在Qt來圓一個int到最近的5如何在Qt的圓一個int到最近的5

一個很好的方式。例如:

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

+0

[C++:舍入到最接近的數字倍數]的可能重複(http://stackoverflow.com/questions/3407012/c-rounding-up-to-the-nearest-multiple-of-a-號碼) – dtech

回答

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最低倍數(您可以通過removi做NG其餘的),那就是:

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

現在,您可以檢查剩餘時間和增加5到圓號碼,如果餘數大於2.5,否則加0
爲了檢驗它,我把餘數除以5(它的上限),這樣得到一個[0,1]中的數字[並用0.5檢查它知道如何舍入原始數字。

它遵循相同功能的更緊湊的版本:

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

我不知道,如果Qt框架提供了類似的東西開箱即用,但它是一個一個線功能的問題,你可以輕鬆地爲自己寫。

+0

它工作很好,現在我必須明白你在做什麼 – MajorC

2

舍入C++到最接近的整數通常是通過做:

static_cast<int>(number + 0.5); 

現在,它送到未來5年,我會帶它到系統中,我們可以把這個四捨五入規則(即5 - > 1,6 - > 1.2),然後將其帶回到真正爲5的系統中:

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

我覺得這個配方最簡單。

相關問題