如何将 Qt 中的整数四舍五入到最接近的 5
How to round an int in Qt to the nearest 5
我正在寻找一种将 Qt 中的整数四舍五入到最接近的 5 的好方法。
例如:
8 -> 10
12 -> 10
13 -> 15
15 -> 15
17 -> 15
等等
这里有一个可能的解决方案:
#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 框架是否提供了类似的开箱即用的东西,但这是一行函数的问题,您可以轻松地自己编写它。
在 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;
}
我觉得这个公式最简单。
我正在寻找一种将 Qt 中的整数四舍五入到最接近的 5 的好方法。
例如:
8 -> 10
12 -> 10
13 -> 15
15 -> 15
17 -> 15
等等
这里有一个可能的解决方案:
#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 框架是否提供了类似的开箱即用的东西,但这是一行函数的问题,您可以轻松地自己编写它。
在 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;
}
我觉得这个公式最简单。