我正在寻找一种将Qt中的int舍入到最接近的5的好方法。
e.g:
8 -> 10
12 -> 10
13 -> 15
15 -> 15
17 -> 15
等等
答案 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框架是否提供了开箱即用的类似功能,但它只是一行功能,您可以轻松自己编写。