四舍五入到间隔不均匀的整数
Rounding to whole numbers unevenly spaced apart
我正在编写一个函数来帮助我进行力量训练。该程序根据我需要举起的百分比生成特定的重量。与其给我227.44,我希望它四舍五入到最接近的值,我有确切的重量放在我的横杆上,应该是225。我已经编写了一个有效的函数,但我知道必须有一个更快/更好的方法。我是一名CS学生,当我得到更小的盘子来锻炼时,我也会修改这个代码。如何以更好的方式实现这一点:
int getPercentage(double percent, double max){
int finalValue = max*percent;
if(finalValue < 45) return 45;
else if(finalValue >= 45 && finalValue < 55) return 45;
else if(finalValue >= 55 && finalValue < 65) return 65;
else if(finalValue >= 65 && finalValue < 80) return 65;
else if(finalValue >= 80 && finalValue < 95) return 95;
else if(finalValue >= 95 && finalValue < 105) return 95;
else if(finalValue >= 105 && finalValue < 115) return 115;
else if(finalValue >= 115 && finalValue < 125) return 115;
else if(finalValue >= 125 && finalValue < 135) return 135;
else if(finalValue >= 135 && finalValue < 145) return 135;
else if(finalValue >= 145 && finalValue < 155) return 155;
else if(finalValue >= 155 && finalValue < 170) return 155;
else if(finalValue >= 170 && finalValue < 185) return 185;
else if(finalValue >= 185 && finalValue < 195) return 185;
else if(finalValue >= 195 && finalValue < 205) return 205;
else if(finalValue >= 205 && finalValue < 215) return 205;
else if(finalValue >= 215 && finalValue < 225) return 225;
else if(finalValue >= 225 && finalValue < 235) return 225;
else if(finalValue >= 235 && finalValue < 245) return 245;
else if(finalValue >= 245 && finalValue < 260) return 245;
else return 275;
}
嗯。。。
int getPercentage(double percent, double max){
int finalValue = max*percent;
if(finalValue > 260) return 275;
else if(finalValue >= 235) return 245;
else if(finalValue >= 215) return 225;
else if(finalValue >= 170) return 185;
else if(finalValue >= 145) return 155;
else if(finalValue >= 125) return 135;
else if(finalValue >= 105) return 115;
else if(finalValue >= 80) return 95;
else if(finalValue >= 55) return 65;
else return 45
}
这肯定是一个开始。
解释:
我做了一些简化。
1) 要测试的单个范围。当你有两个相邻的数字范围要测试,并且在任何一个范围内着陆都会得到相同的结果时,你可以将它们组合成一个。有两个范围的唯一真正原因是,如果你正在用它们做两件不同的事情,而你不在给定的样本中。
2) 从最高到最低。
我做的第二件事是重新安排你的测试从最高到最低。这就利用了else-if功能,无需测试天花板。记住:Else-if取第一个真条件,执行它的块并抛出其余的。因此,如果执行到达下一个Else-if,可以放心地假设这个数字没有超过我们的上限,因为我们的上限紧挨着前一层。因此,我们可以测试底层,使代码更具可读性。
注意:我们本可以很容易地从最低到最高编写类似的函数,但我选择这种方式是因为它对我来说更容易。
最后但同样重要的是,
3) 删除了对低于45和55 的测试
这也属于数字1,因为0-45和46-55也是相邻的两个范围,但我单独提到它们还有另一个原因:它们的包含是不必要的。正如在#2中所讨论的,如果达到了其他值,可以放心地假设这个数字小于我们的上限:55。再说一遍,我们只需要检查地板。由于我们这次没有楼层(尽管我们稍后可以增加一个),我们没有什么可检查的。因此,我们不需要else if,只需要else。
- 整数不会重复超过随机数
- C++ 中的二维整数数组,每行中的元素数量不均匀
- C++字符串大小减去整数不是预期值,为什么?
- 在C/C++中检查数字是否为整数(不带scanf/gets/etc)
- 快速扫描标准以获取整数不起作用
- 使用"JSON for Modern C++"库检测整数不适合指定类型?
- 为什么我的整数不能传输到数组?
- C :按行读取txt文件的读数,单词用单词读取,每行的单词不均匀
- 虽然循环与整数不起作用
- C++整数不会改变
- 如果整数不等于 0,则将其减小为 1
- 来自TBB节点的异步输入/输出和不均匀输出
- 四舍五入到间隔不均匀的整数
- 1 字节整数不转换 I/O 格式
- 这个constexpr整数不是空指针常量吗
- 模板的整数:不能出现在常量表达式中
- 在 CPP 中使用 Stdio.H 标头的结果不均匀
- 如何检查输入的数字是否为整数不是浮点数
- 插入和替换代价不均匀的Levenshtein距离:
- 将整数不向后拆分为数字