我试图用 javascript 制作一些算法函数并遇到一些问题
function Algorithm() {
var endone;
var endtwo;
var endtheend;
var v1 = document.getElementsByName("v1")[0].value; //worth to 91
var v2 = document.getElementsByName("v2")[0].value; //worth to 61
var v3 = document.getElementsByName("v3")[0].value; //worth to 20
endone = Math.round(v1 * 0.30);
endtwo = Math.round(((v2 + v3) / 2) * 0.70);
endtheend = endone + endtwo;
document.getElementById("ending").innerHTML = "end : " + endtheend;
}
如果我使用计算器执行相同的算法,我会得到55.65,但是当我尝试使用此函数时,我会得到2169。
有人可能知道问题是什么并告诉我如何解决她?
最佳答案
问题是 v1
、v2
和 v3
不是数字。它们是字符串。所以你所做的每一次计算都依赖于字符串之间的隐式转换和运算。
例如,在下面的代码片段中,我们将字符串值“91”隐式转换为 double float ,然后完成通常的乘法。
var v1 = "91";
console.log(v1*0.3);
另一方面,如下:
var v2 = "61";
var v3 = "20";
console.log((v2 + v3) / 2)
我们有一个字符串连接“61”+“20”,结果是一个新字符串“6120”,然后“6120”被隐式转换为 double float ,并与 2 相除。
解决办法是什么?
您必须使用 parseInt 来解析这些值或parseFloat ,如下所示:
var v2 = "61";
var v3 = "20";
console.log((parseInt(v2,10) + parseInt(v3,10)) / 2)
关于javascript - JavaScript 的数学算法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42284487/