我使用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循环吗?如果是这样,那么更好的替代方案是什么呢?感谢
答案 0 :(得分:1)
我对此表示怀疑,但一直都是错误。 .toFixed
返回一个字符串(我知道),inp.value
是一个字符串(我也知道)。但我认为,因为>
只使用数字,所以解释器会将它们的值用作数字并进行正确的比较。但我错了。因此,要强制解释器将其视为数字,请使用{strong>显式方式使用Number
或parseFloat
,如下所示:
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;
}
同等检查也是如此。