Javascript如何处理BODMAS?

时间:2015-05-20 09:54:17

标签: javascript jquery math

我正在使用Javascript对我目前正在进行的项目进行一些数学计算,并且偶然发现了以下内容:

我计算结果列表中剩余的结果数量(有"加载更多"按钮)

代码如下:

if (data.length > startIndex + maxLoadAmount) {
    var loadMoreButton = new LoadButton()
    loadButton.ToLoad = data.length - startIndex + maxLoadAmount;

    loadMoreButton.click(function () {
    var amountOfCurrentWidgets = $(this).parent().children('.widget').length;
    this.remove();
        loadChildren(amountOfCurrentWidgets, selector, data, widgetType);
    });
    $(selector).append(loadMoreButton);
}

当我跑步时,我对结果感到惊讶!

在特定测试中,有16个可用的小部件,当从索引0开始,最多显示5个时,结果为21。

我将此跟踪到javascript,在添加之前执行减法。 你可以在jsfiddle中重现它: http://jsfiddle.net/JamesPattison/3hvr4vsr/

解决方法是将括号中的加法括起来,不过我想我真正想问的是:

我疯了吗?

1 个答案:

答案 0 :(得分:5)

在JavaScript加法和减法have the same precedence中,两者都具有从左到右的关联性。所以使用你的小提琴中的代码:

var x = 16, y = 0, z = 5;
var result = x-y+z; //16-0+5, expected by BODMAS: 16-(0+5) = 11
$('#results').html(result.toString())

result计算方式如下:

(16 - 0) + 5

这是用JavaScript,Java,C,C ++,C#以及我能想到的所有其他语言进行评估的方式。

唯一不同的方法就是添加更高优先级而不是减法,就像乘法一样:

16 - 0 * 5 => 16 - (0 * 5)

但事实并非如此。

Re BODMAS,真的应该写:

B
O
DM
AS

来自the WikiPedia article on order of operations

  

这些助记符在以这种方式编写时可能会产生误导,特别是如果用户不知道乘法和除法具有相同的优先级,加法和减法也是如此。

类似地,所有以下参考文献都说在标准算术中,除法和乘法具有相同的优先级,加法和减法具有相同的优先级:

The Order of Operations: PEMDAS - purplemath.com

  

记住操作顺序的常用技巧是缩写“PEMDAS”,它变成了“请原谅我亲爱的莎莉阿姨”。它代表“括号,指数,乘法和除法,加法和减法”。这告诉你操作的等级:括号超出指数,超出乘法和除法(但乘法和除法在同一等级),这两个超出加法和减法(这是一起排在最低排名

Math Steps - eduplace.com

  

规则是:

     
      
  1. 从左到右乘以并分开。
  2.   
  3. 从左到右加减。
  4.   

Rules of arithmetic - mathcentre.ac.uk

  

这很难记住,所以这里有一个帮助你的首字母缩写词 - BODMAS。这意味着:

     

enter image description here

     

其中除法和乘法具有相同的优先级,加法和减法具有相同的优先级,因此在每种情况下我们都将它们放在一起。