UNPKG

vtils

Version:

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

66 lines (65 loc) 2.64 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import DecimalLight from 'decimal.js-light'; import { castArray } from 'lodash-uni'; var make = function make(config) { var Decimal = DecimalLight.clone(config); var getValue = function getValue(value) { return typeof value === 'function' ? value(_extends({}, Calculator, { toNumber: function toNumber(value) { return new Decimal(value); } })) : value; }; var Calculator = { decimal: DecimalLight, 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 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 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 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 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 的浮点数精度计算问题。 */ export var Calculator = make();