`Math.round()` 函数返回一个数字四舍五入后最接近的整数。

## 语法

    Math.round(x)

### 参数

`x`
  一个数值。

### 返回值

给定数字的值四舍五入到最接近的整数。

## 描述

如果参数的小数部分大于 0.5，则舍入到相邻的绝对值更大的整数。 如果参数的小数部分小于 0.5，则舍入到相邻的绝对值更小的整数。如果参数的小数部分恰好等于0.5，则舍入到相邻的在正无穷（+∞）方向上的整数。注意，与很多其他语言中的`round()函数`不同，`Math.round()并不总是舍入到远离0的方向（尤其是在负数的小数部分恰好等于0.5的情况下）。`

因为 `round()` 是 `Math` 的静态方法，你应该直接使用 `Math.round()`，而不是作为你创建的 `Math` 对象的一个实例方法来使用（`Math`没有构造函数）。

## 示例

    x = Math.round(20.49);   //20
    x = Math.round(20.5);    //21
    x = Math.round(-20.5);   //-20
    x = Math.round(-20.51);  //-21

### 小数舍入

    // 闭包
    (function(){

      /**
       * Decimal adjustment of a number.
       *
       * @param {String}  type  The type of adjustment.
       * @param {Number}  value The number.
       * @param {Integer} exp   The exponent (the 10 logarithm of the adjustment base).
       * @returns {Number}      The adjusted value.
       */
      function decimalAdjust(type, value, exp) {
        // If the exp is undefined or zero...
        if (typeof exp === 'undefined' || +exp === 0) {
          return Math[type](value);
        }
        value = +value;
        exp = +exp;
        // If the value is not a number or the exp is not an integer...
        if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
          return NaN;
        }
        // Shift
        value = value.toString().split('e');
        value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
        // Shift back
        value = value.toString().split('e');
        return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
      }

      // Decimal round
      if (!Math.round10) {
        Math.round10 = function(value, exp) {
          return decimalAdjust('round', value, exp);
        };
      }
      // Decimal floor
      if (!Math.floor10) {
        Math.floor10 = function(value, exp) {
          return decimalAdjust('floor', value, exp);
        };
      }
      // Decimal ceil
      if (!Math.ceil10) {
        Math.ceil10 = function(value, exp) {
          return decimalAdjust('ceil', value, exp);
        };
      }

    })();

    // Round
    Math.round10(55.55, -1); // 55.6
    Math.round10(55.549, -1); // 55.5
    Math.round10(55, 1); // 60
    Math.round10(54.9, 1); // 50
    Math.round10(-55.55, -1); // -55.5
    Math.round10(-55.551, -1); // -55.6
    Math.round10(-55, 1); // -50
    Math.round10(-55.1, 1); // -60
    Math.round10(1.005, -2); // 1.01 -- compare this with Math.round(1.005*100)/100 above
    // Floor
    Math.floor10(55.59, -1); // 55.5
    Math.floor10(59, 1); // 50
    Math.floor10(-55.51, -1); // -55.6
    Math.floor10(-51, 1); // -60
    // Ceil
    Math.ceil10(55.51, -1); // 55.6
    Math.ceil10(51, 1); // 60
    Math.ceil10(-55.59, -1); // -55.5
    Math.ceil10(-59, 1); // -50

或：

    function round(number, precision) {
        return Math.round(+number + 'e' + precision) / Math.pow(10, precision);
        //same as:
        //return Number(Math.round(+number + 'e' + precision) + 'e-' + precision);
    }

    round(1.005, 2);    //1.01

## 规范

规范版本 | 规范状态 | 注解
--- | --- | ---
ECMAScript 1st Edition. Implemented in JavaScript 1.0. | Standard | Initial definition.
ECMAScript 5.1 (ECMA-262) Math.round | Standard |
ECMAScript 2015 (6th Edition, ECMA-262) Math.round | Standard |

## 浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

- Desktop
- Mobile

Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit)
--- | --- | --- | --- | --- | ---
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes)

Feature | Android | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile
--- | --- | --- | --- | --- | ---
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes)

## 相关链接

- `Math.abs()`
- `Math.ceil()`
- `Math.floor()`