vtils
Version:
一个面向业务的 JavaScript/TypeScript 实用程序库。
66 lines (65 loc) • 2.64 kB
JavaScript
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();