heyujie
2021-05-24 4885600ecc369aa2e30a65de8dd7a410f13c34df
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Credit:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
// #Decimal_rounding
 
"use strict";
 
var isValue       = require("../object/is-value")
  , ensureInteger = require("../object/ensure-integer");
 
var split = String.prototype.split;
 
module.exports = function (type) {
    return function (value/*, exp*/) {
        value = Number(value);
        var exp = arguments[1];
        if (isValue(exp)) exp = ensureInteger(exp);
        if (!value) return value;
        if (!exp) return Math[type](value);
        if (!isFinite(value)) return value;
 
        // Shift
        var tokens = split.call(value, "e");
        value = Math[type](tokens[0] + "e" + ((tokens[1] || 0) - exp));
 
        // Shift back
        tokens = value.toString().split("e");
        return Number(tokens[0] + "e" + (Number(tokens[1] || 0) + exp));
    };
};