不断增加100%的功能

时间:2016-09-24 11:36:34

标签: math percentage

因此。我有一个功能,它可以正常工作,但从长远来看它可能会有点沉重,我想知道是否有更好的方法来做到这一点:

float getPval(float i) {
    float retunrVal = 0;
    for(int j = 0; j < i-1; j++) {
      returnVal += (100 - returnVal)/2;
    }
  returnVal += ((100-returnVal)/2)*(i - (int)i);
  Return returnVal;
}

基本上,如果我写:

getPval(1) I'll get 50 back.
getPval(1.5) would return 62,5
getPval(2) would return 75.
getPval(3) 87.5
getPval(4) 93.75
getPval(4.2) 94.375

依旧...... 无论数字有多高,它都不会返回100,但会越来越近。

是否有更好的功能而不是我的getPval(flaot)?

现在,愚蠢的表达我知道,但我不知道该怎么称呼这样的公式...

1 个答案:

答案 0 :(得分:1)

因此,在循环的每个步骤中,它找到returnVal和100之间差异的一半。然后将此值添加到返回值。

另一种思考方式是找到100(1 - 0.5 ^ i)。在java中,您可以将其实现为

returnVal = 100. * ( 1.0 - Math.pow(0.5,Math.floor(i)) );
returnVal += ((100-returnVal)/2)*(i - (int)i);

您甚至可能会发现使用

更好
returnVal = 100. * ( 1.0 - Math.pow(0.5,i) );

将为非整数参数提供不同的结果。