Javascript 数学在函数内部是不同的

标签 javascript math

我有一个非常愚蠢的问题。这段代码:

var x=5;
console.log(x*20+x-1);

按预期打印出 104,但是:

function Go(){
    x = document.getElementById("input").value;
    console.log(x);
    console.log(x*20+x-1);
}

打印出 5,然后打印出 1004。这是为什么?

console.log(x*20) 打印 100。我尝试在它周围加上括号,然后添加 (x-1) 但它仍然输出 1004。

最佳答案

input elementvalue 属性是一个字符串,因此您的x实际上是“5”,而不是数字5。以下是 JavaScript 进行算术隐式类型转换的方法:

  "5" * 20 + "5" - 1
= 100      + "5" - 1
= "1005"         - 1
= 1004

因此,在第一步中,"5" 被正确转换为数字 5,留下 100 作为中间结果。但是,向数字添加字符串会将数字转换为字符串,因此接下来发生的是将字符串连接到 "1005"。最后,从字符串中减去数字1,这会导致字符串再次转换为数字,得到最终结果:1004

要避免这种情况,您只需先将 x 转换为数字即可:

var x = document.getElementById("input").value;
x = parseInt(x, 10); // or parseFloat(x) if you’re interested in a decimals
console.log(x * 20 + x - 1);

有趣的事实:如果你写的是x * 21 - 1,这相当于你的计算,问题就不会出现。

关于Javascript 数学在函数内部是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22123876/

相关文章:

math - 二维离散函数上多线积分的快速算法

javascript - 在 Android 平板电脑/手机上调试 javascript?

javascript - 如何在 FF 和 IOS 中使用 clip-path 多边形

javascript - 基于 if 条件错误的警报

Javascript 按名称绑定(bind)事件处理函数

android - 如何创建一个指针始终指向某个 GPS 位置的指南针? (在安卓系统中)

javascript - JS 中的简单数学加法给出错误结果

math - float 学坏了吗?

math - float 学有问题吗?

JavaScript 选项卡式文件夹在 Internet Explorer 中不起作用