javascript - JavaScript 的数学算法错误?

标签 javascript math

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

有人可能知道问题是什么并告诉我如何解决她?

最佳答案

问题是 v1v2v3 不是数字。它们是字符串。所以你所做的每一次计算都依赖于字符串之间的隐式转换和运算。

例如,在下面的代码片段中,我们将字符串值“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/

相关文章:

c - 给定 2^n,使用对数求 n

c++ - Windows时间戳(C++)

Javascript - 如何使对象直接位于另一个对象的前面?

javascript - jQuery 在 IE10 中未触发

javascript - 将 XML 导入 HTML

math - 两个圆之间的交面积

c - 在 C 中声明一个只有 2 个小数点的变量

javascript - 如何将 jQuery 函数应用于内联 CSS

javascript - 如何使用 Reactjs 在新选项卡中将 Canvas 作为图像打开

javascript - 如何用 Jest 测试 TypeScript 中的枚举列表是否包含所有字符串值?