美文网首页
小数舍入

小数舍入

作者: _____西班木有蛀牙 | 来源:发表于2020-04-23 17:46 被阅读0次

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

    // 闭包
    (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
    

    or

    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
    

    相关文章

      网友评论

          本文标题:小数舍入

          本文链接:https://www.haomeiwen.com/subject/npoaihtx.html