我试图用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;
}
如果我使用计算器IM进行相同的算法 55.65 ,但是当我尝试使用此函数时,im im im for 2169 。
有人可能知道问题是什么,并向我展示如何解决她?
问题是v1
,v2
和v3
不是数字。他们是弦。因此,您进行的每个计算都取决于字符串之间的隐式转换和操作。
例如,在下面的段中,我们对字符串值" 91"到双浮数字进行了隐式转换,然后进行了通常的mulitplication。
var v1 = "91";
console.log(v1*0.3);
另一方面:
var v2 = "61";
var v3 = "20";
console.log((v2 + v3) / 2)
我们有一个字符串串联" 61" " 20"导致新的字符串" 6120",然后将" 6120"隐式转换为双浮子数字,并完成了2个划分。
解决方案是什么?
您必须使用 parseint 或 parsefloat 来解析这些值:
var v2 = "61";
var v3 = "20";
console.log((parseInt(v2,10) + parseInt(v3,10)) / 2)
获得 HTMLInputElement
s value
属性时,得到的是 string
。+
操作员应用于两个字符串仅会使它们串联,因此,例如v2 == "7"
和v3 === "0"
,当您进行(v2 + v3)
时,您将获得"70"
。
解决问题的解决方案是简单地通过parseInt
传递值:
var v1 = parseInt(document.getElementsByName("v1")[0].value, 10);
var v2 = parseInt(document.getElementsByName("v2")[0].value, 10);
var v3 = parseInt(document.getElementsByName("v3")[0].value, 10);
// The second argument to parseInt isn't needed if you only target newer browsers.
我建议您阅读JavaScript中的类型强制以获取更多信息。
问题是您的所有值(v1,v2,v3)是字符串类型。您需要先将它们转换为数字。因此,以下代码应起作用:
function Algorithm() {
var endone;
var endtwo;
var endtheend;
var v1 = Number(document.getElementsByName("v1")[0].value);
var v2 = Number(document.getElementsByName("v2")[0].value);
var v3 = Number(document.getElementsByName("v3")[0].value);
endone = Math.round(v1 * 0.30);
endtwo = Math.round(((v2 + v3) / 2) * 0.70);
endtheend = endone + endtwo;
document.getElementById("ending").innerHTML = "end : " + endtheend;
}
如果您的值包含任何字母字符,也可以使用Parseint。