如何处理将值移过1的修正值

时间:2019-04-27 22:57:17

标签: javascript

我正在使用“技能计算器”,但是遇到了这个问题。将3放入输入字段时,将显示2 ...的经验  2在输入字段中是1级的空值...对于所有最大为100的数字都是相同的,显示较低数字的体验56将显示55经验。

function levelToExperience(goalLevel) {
        var experience = 0;

        for(var curLevel = 1 ; curLevel < goalLevel; curLevel += 1) {
            experience = Math.floor(10 * Math.pow(curLevel, 3) - 10);
        }

        return Math.floor(experience);
    }

    // Convert experience to level
    function experienceToLevel(goalExperience) {
        var curExperience = 0;

        for(var level = 1; level < 100; level += 1) {
            curExperience += Math.floor(Math.floor(10 * Math.pow(level, 3)) - 10);

            if(curExperience > goalExperience) {
                break;
            }
        }

        return level;
    }

我使用10L3 − 10(L =级别)级别2 = 70 exp进行此计算,所以我不明白为什么2显示0,而3显示2的经验。

1 个答案:

答案 0 :(得分:2)

for(var curLevel = 1 ; curLevel < goalLevel; curLevel += 1) {

问题是此循环。当您将2传递给它时,如果curLevel小于targetLevel,即2 ,则继续

因此,您执行Math.floor(10 * Math.pow(1, 3) - 10)为0。 然后curLevel会增加,但是curlevel不小于2,因此您退出返回0。


您不必循环,我想您只想知道有多少经验可以达到目标。

function levelToExperience(goalLevel) {
   return Math.floor(10 * Math.pow(goalLevel, 3) - 10);
}

同样,如果您选择值的多维数据集根,则可以大大降低您的experienceToLevel:

function experienceToLevel(goalExperience) {
  return Math.cbrt((goalExperience + 10)/10);
}