for循环增量,小数停止在1.42而不是继续,直到计算完成

时间:2017-02-07 10:28:43

标签: javascript

我使用for循环在 JavaScript 中开发了一个简单的小方根计算器。

但是,我注意到每次循环迭代时都会输出i的每个值(使用console.log(i).toFixed(2)),计数每次都会停在1.42

以下是 JavaScript

// inp is the input in which the user types the number they would like to find the square root of
for(var i = 0; i < inp.value; i += 0.01){
    var check = i * i;
    check = check.toFixed(2); // fix decimal to a tenth

    console.log(i.toFixed(2)); // output value to console

    if(check == inp.value){ // if i * i is equal to user input
        alert(i); // alert the square root
        break; // break out of for loop
    } else if(check > inp.value){ // if the value is more than user input
        alert("Value could not be found."); // alert value could not be found 
        break; // break out of for loop
    }
}

感谢所有帮助,
感谢。

编辑:我注意到如果我要输入1,它会输出到0.99,而不是1.42

编辑2号:我测试了Ibrahims的新答案,并且它有一些有效的方法。它现在停在3.17,而不是1.42。然而,我注意到在测试之后,我的笔记本电脑风扇会开始全油门旋转,我的CPU负载会在短时间内飙升至100%,然后降至约40%。它可能是笔记本电脑无法处理一致的for循环吗?如果是这样,那么更好的替代方案是什么呢?感谢

小提琴:https://jsfiddle.net/pk7or60f/

1 个答案:

答案 0 :(得分:1)

我对此表示怀疑,但一直都是错误。 .toFixed返回一个字符串(我知道),inp.value是一个字符串(我也知道)。但我认为,因为>只使用数字,所以解释器会将它们的值用作数字并进行正确的比较。但我错了。因此,要强制解释器将其视为数字,请使用{strong>显式方式使用NumberparseFloat,如下所示:

else if(Number(check) > Number(inp.value)){
    alert("Value could not be found.");
    break;
}

或使用unary +隐式方式,如下所示:

else if(+check > +inp.value){
    alert("Value could not be found.");
    break;
}

同等检查也是如此。