【发布时间】:2016-05-25 06:46:39
【问题描述】:
我正在寻找一种将 Qt 中的 int 舍入到最接近的 5 的好方法。
例如:
8 -> 10
12 -> 10
13 -> 15
15 -> 15
17 -> 15
等等
【问题讨论】:
我正在寻找一种将 Qt 中的 int 舍入到最接近的 5 的好方法。
例如:
8 -> 10
12 -> 10
13 -> 15
15 -> 15
17 -> 15
等等
【问题讨论】:
在 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;
}
我觉得这个公式最简单。
【讨论】:
这里有一个可能的解决方案:
#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 框架是否提供了类似的开箱即用的功能,但这是一个单行函数的问题,您可以轻松地自己编写它。
【讨论】: