vtils
Version:
一个面向业务的 JavaScript/TypeScript 实用程序库。
71 lines (69 loc) • 2.95 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
exports.__esModule = true;
exports.Calculator = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _decimal = _interopRequireDefault(require("decimal.js-light"));
var _lodashUni = require("lodash-uni");
var make = function make(config) {
var Decimal = _decimal.default.clone(config);
var getValue = function getValue(value) {
return typeof value === 'function' ? value((0, _extends2.default)({}, Calculator, {
toNumber: function toNumber(value) {
return new Decimal(value);
}
})) : value;
};
var Calculator = {
decimal: _decimal.default,
make: make,
add: function add() {
for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {
values[_key] = arguments[_key];
}
return this.toNumber(values.length === 0 ? 0 : values.reduce(function (res, value) {
return (0, _lodashUni.castArray)(getValue(value)).reduce(function (res, item) {
return res.add(item);
}, res);
}, new Decimal(0)));
},
sub: function sub() {
for (var _len2 = arguments.length, values = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
values[_key2] = arguments[_key2];
}
return this.toNumber(values.length === 0 ? 0 : values.reduce(function (res, value, index) {
return (0, _lodashUni.castArray)(getValue(value)).reduce(function (res, item, index2) {
return index === 0 && index2 === 0 ? res.add(item) : res.sub(item);
}, res);
}, new Decimal(0)));
},
mul: function mul() {
for (var _len3 = arguments.length, values = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
values[_key3] = arguments[_key3];
}
return this.toNumber(values.length === 0 ? 0 : values.reduce(function (res, value) {
return (0, _lodashUni.castArray)(getValue(value)).reduce(function (res, item) {
return res.mul(item);
}, res);
}, new Decimal(1)));
},
div: function div() {
for (var _len4 = arguments.length, values = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
values[_key4] = arguments[_key4];
}
return this.toNumber(values.length === 0 ? 0 : values.reduce(function (res, value, index) {
return (0, _lodashUni.castArray)(getValue(value)).reduce(function (res, item, index2) {
return index === 0 && index2 === 0 ? res.add(item) : res.div(item);
}, res);
}, new Decimal(0)));
},
toNumber: function toNumber(value) {
return new Decimal(value).toDecimalPlaces(config == null ? void 0 : config.decimalPlaces).toNumber();
}
};
return Calculator;
};
/**
* 科学计算器。主要是为了避免 js 的浮点数精度计算问题。
*/
var Calculator = exports.Calculator = make();
;