UNPKG

vtils

Version:

一个面向业务的 JavaScript/TypeScript 实用程序库。

71 lines (69 loc) 2.95 kB
"use strict"; 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();