使用JavaScript错误的数学算法



我试图用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

有人可能知道问题是什么,并向我展示如何解决她?

问题是v1v2v3不是数字。他们是弦。因此,您进行的每个计算都取决于字符串之间的隐式转换和操作。

例如,在下面的段中,我们对字符串值" 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。

最新更新