javascript - 如何修复被移动超过 1 的值

标签 javascript

我正在开发“技能计算器”,但是我遇到了这个问题。当将 3 放入输入字段时,它会显示 2 的经验...当放入时 2 进入输入字段,它是一个 null,即级别 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 = level) level 2 = 70 exp 所以我不明白为什么 2 显示 0 而 3 显示 2 的经验。

最佳答案

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

问题出在这个循环上。当您向其中传递 2 时,如果 curLevel 小于 goalLevel(即 2),则继续,即 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);
}

关于javascript - 如何修复被移动超过 1 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55885567/

相关文章:

javascript - 拉斐尔剪辑图像问题

javascript - 如何使用c# asp.net上传默认文件

javascript - 使用 API 动态字段分配表格单元格

javascript - 根据 HTML 表单中的值更改 JavaScript 函数

javascript - 从选择中删除特定父级的子级

javascript - Firebase 函数 - 无法读取用户 ID 内的属性

javascript - react-dropzone 两次打开文件选择器

javascript - 如何将数据存储在存储在变量中的数组中?

javascript - MongoDB/Javascript 范围问题

javascript - 以触​​发任何更改处理程序的方式使用 jQuery 选择 <select> 选项