四舍五入到不均匀间隔的整数

时间:2019-02-10 23:20:40

标签: c++

我正在编写一个功能来辅助我的力量训练。该程序根据我需要提升的百分比生成特定的体重。与其给我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;
}

1 个答案:

答案 0 :(得分:3)

好吧...

psql/command.c

肯定是一个开始。

说明:

我做了一些简化。

1)要测试的单个范围。 当您要测试的数字范围彼此相邻时,如果有2个范围,并且降落在这两个范围内的结果相同,则可以将它们组合为一个。拥有2个范围的唯一真实原因是,如果您对它们进行2个不同的操作,而您不在给定的样本中。

2)最高到最低。

我要做的第二件事是对测试进行重新排序,使其从最高到最低运行。这利用了else-if功能,并且无需测试上限。切记:否则,如果采用第一个真实条件并执行其代码块,然后将其余代码丢弃。因此,如果执行到达下一个else-if,则可以安全地假设该数字未超出我们的上限,因为我们的上限紧挨着上一层。因此,我们只需要测试底层代码即可使代码更具可读性。

注意:我们也可以很容易地编写一个从低到高的类似函数,但是我之所以选择这种方式,是因为它对我来说更容易。

最后但并非最不重要

3)删除了45岁以下和55岁以下的测试

这也属于数字1,因为0-45和46-55也是彼此相邻的2个范围,但是由于另一个原因,我分别提到了它们:不必包含它们。如#2所述,如果仍然可以达到,则可以安全地假设该数字小于我们的上限:55。同样,我们只需要检查地板。由于这次我们没有发言权(尽管以后可以增加一层),因此我们没有任何要检查的内容。因此,我们不需要else-if,只需一个else。