【问题标题】:Does JavaScript do PEMDAS when doing mathematical calculations?JavaScript 在做数学计算时会做 PEMDAS 吗?
【发布时间】:2023-03-15 15:56:01
【问题描述】:

下面一行:

console.log(ship.x + " + " + (4/3) + " * " + ship.r + " * " + Math.cos(ship.a));

返回:

50 + 1.3333333333333333 * 15 * 6.123233995736766e-17

但是,当我通过 JavaScript 实际进行数学运算时:

console.log(ship.x + 4 / 3 * ship.r * Math.cos(ship.a));

它返回'50'的整数值?这怎么可能?该行中的第一个值是 50,因此您会认为它在运行后逻辑上会是一个更大的数字。我已经尝试过 PEMDAS 和许多其他变体,但始终没有得到 50 的值。JavaScript 究竟对上述代码做了什么?这是整个代码页的链接:https://codepen.io/hoyos/pen/vYJqaRw?editors=0010

【问题讨论】:

  • 浮点数学不能代表那么高的精度。将一个很小的数字添加到任何超过 15 的整数都将无效。
  • 这能回答你的问题吗? Is floating point math broken?

标签: javascript math return console.log


【解决方案1】:

Calculuswhiz 的评论是正确的。浮点数学无法处理您的数字(6e-17) 的大小,因此您最终得到50 + 1.33333 * 15 * 0,即50 + 0

查看此问题的批准答案以了解更多详情: Is floating point math broken?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多