js-big-decimal
Version:
Work with large numbers on the client side. Round them off to any required precision.
934 lines (881 loc) • 31.5 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["bigDecimal"] = factory();
else
root["bigDecimal"] = factory();
})(global, function() {
return /******/ (function() { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ 165:
/***/ (function(__unused_webpack_module, exports) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.abs = void 0;
function abs(n) {
if (typeof n == "number" || typeof n == "bigint")
n = n.toString();
if (n[0] == "-")
return n.substring(1);
return n;
}
exports.abs = abs;
/***/ }),
/***/ 217:
/***/ (function(__unused_webpack_module, exports) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.pad = exports.trim = exports.add = void 0;
//function add {
function add(number1, number2) {
var _a;
if (number2 === void 0) { number2 = "0"; }
var neg = 0, ind = -1, neg_len;
//check for negatives
if (number1[0] == "-") {
number1 = number1.substring(1);
if (!testZero(number1)) {
neg++;
ind = 1;
neg_len = number1.length;
}
}
if (number2[0] == "-") {
number2 = number2.substring(1);
if (!testZero(number2)) {
neg++;
ind = 2;
neg_len = number2.length;
}
}
number1 = trim(number1);
number2 = trim(number2);
_a = pad(trim(number1), trim(number2)), number1 = _a[0], number2 = _a[1];
if (neg == 1) {
if (ind === 1)
number1 = compliment(number1);
else if (ind === 2)
number2 = compliment(number2);
}
var res = addCore(number1, number2);
if (!neg)
return trim(res);
else if (neg == 2)
return "-" + trim(res);
else {
if (number1.length < res.length)
return trim(res.substring(1));
else
return "-" + trim(compliment(res));
}
}
exports.add = add;
function compliment(number) {
if (testZero(number)) {
return number;
}
var s = "", l = number.length, dec = number.split(".")[1], ld = dec ? dec.length : 0;
for (var i = 0; i < l; i++) {
if (number[i] >= "0" && number[i] <= "9")
s += 9 - parseInt(number[i]);
else
s += number[i];
}
var one = ld > 0 ? "0." + new Array(ld).join("0") + "1" : "1";
return addCore(s, one);
}
function trim(number) {
var parts = number.split(".");
if (!parts[0])
parts[0] = "0";
while (parts[0][0] == "0" && parts[0].length > 1)
parts[0] = parts[0].substring(1);
return parts[0] + (parts[1] ? "." + parts[1] : "");
}
exports.trim = trim;
function pad(number1, number2) {
var parts1 = number1.split("."), parts2 = number2.split(".");
//pad integral part
var length1 = parts1[0].length, length2 = parts2[0].length;
if (length1 > length2) {
parts2[0] =
new Array(Math.abs(length1 - length2) + 1).join("0") +
(parts2[0] ? parts2[0] : "");
}
else {
parts1[0] =
new Array(Math.abs(length1 - length2) + 1).join("0") +
(parts1[0] ? parts1[0] : "");
}
//pad fractional part
(length1 = parts1[1] ? parts1[1].length : 0),
(length2 = parts2[1] ? parts2[1].length : 0);
if (length1 || length2) {
if (length1 > length2) {
parts2[1] =
(parts2[1] ? parts2[1] : "") +
new Array(Math.abs(length1 - length2) + 1).join("0");
}
else {
parts1[1] =
(parts1[1] ? parts1[1] : "") +
new Array(Math.abs(length1 - length2) + 1).join("0");
}
}
number1 = parts1[0] + (parts1[1] ? "." + parts1[1] : "");
number2 = parts2[0] + (parts2[1] ? "." + parts2[1] : "");
return [number1, number2];
}
exports.pad = pad;
function addCore(number1, number2) {
var _a;
_a = pad(number1, number2), number1 = _a[0], number2 = _a[1];
var sum = "", carry = 0;
for (var i = number1.length - 1; i >= 0; i--) {
if (number1[i] === ".") {
sum = "." + sum;
continue;
}
var temp = parseInt(number1[i]) + parseInt(number2[i]) + carry;
sum = (temp % 10) + sum;
carry = Math.floor(temp / 10);
}
return carry ? carry.toString() + sum : sum;
}
function testZero(number) {
return /^0[0]*[.]{0,1}[0]*$/.test(number);
}
/***/ }),
/***/ 664:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.compareTo = void 0;
var add_1 = __webpack_require__(217);
var stripTrailingZero_1 = __webpack_require__(859);
function compareTo(number1, number2) {
var _a, _b;
var negative = false;
_a = [number1, number2].map(function (n) { return (0, stripTrailingZero_1.stripTrailingZero)(n); }), number1 = _a[0], number2 = _a[1];
if (number1[0] == '-' && number2[0] != "-") {
return -1;
}
else if (number1[0] != '-' && number2[0] == '-') {
return 1;
}
else if (number1[0] == '-' && number2[0] == '-') {
number1 = number1.substr(1);
number2 = number2.substr(1);
negative = true;
}
_b = (0, add_1.pad)(number1, number2), number1 = _b[0], number2 = _b[1];
if (number1.localeCompare(number2) == 0) {
return 0;
}
for (var i = 0; i < number1.length; i++) {
if (number1[i] == number2[i]) {
continue;
}
else if (number1[i] > number2[i]) {
if (negative) {
return -1;
}
else {
return 1;
}
}
else {
if (negative) {
return 1;
}
else {
return -1;
}
}
}
return 0;
}
exports.compareTo = compareTo;
function checkZero(number) {
}
/***/ }),
/***/ 415:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.divide = void 0;
var add_1 = __webpack_require__(217);
var round_1 = __webpack_require__(350);
var roundingModes_1 = __webpack_require__(916);
function divide(dividend, divisor, precission, mode) {
if (precission === void 0) { precission = 8; }
if (mode === void 0) { mode = roundingModes_1.RoundingModes.HALF_EVEN; }
if (divisor == 0) {
throw new Error('Cannot divide by 0');
}
dividend = dividend.toString();
divisor = divisor.toString();
// remove trailing zeros in decimal ISSUE#18
dividend = dividend.replace(/(\.\d*?[1-9])0+$/g, "$1").replace(/\.0+$/, "");
divisor = divisor.replace(/(\.\d*?[1-9])0+$/g, "$1").replace(/\.0+$/, "");
if (dividend == 0)
return '0';
var neg = 0;
if (divisor[0] == '-') {
divisor = divisor.substring(1);
neg++;
}
if (dividend[0] == '-') {
dividend = dividend.substring(1);
neg++;
}
var pt_dvsr = divisor.indexOf('.') > 0 ? divisor.length - divisor.indexOf('.') - 1 : -1;
divisor = (0, add_1.trim)(divisor.replace('.', ''));
if (pt_dvsr >= 0) {
var pt_dvnd = dividend.indexOf('.') > 0 ? dividend.length - dividend.indexOf('.') - 1 : -1;
if (pt_dvnd == -1) {
dividend = (0, add_1.trim)(dividend + (new Array(pt_dvsr + 1)).join('0'));
}
else {
if (pt_dvsr > pt_dvnd) {
dividend = dividend.replace('.', '');
dividend = (0, add_1.trim)(dividend + (new Array(pt_dvsr - pt_dvnd + 1)).join('0'));
}
else if (pt_dvsr < pt_dvnd) {
dividend = dividend.replace('.', '');
var loc = dividend.length - pt_dvnd + pt_dvsr;
dividend = (0, add_1.trim)(dividend.substring(0, loc) + '.' + dividend.substring(loc));
}
else if (pt_dvsr == pt_dvnd) {
dividend = (0, add_1.trim)(dividend.replace('.', ''));
}
}
}
var prec = 0, dl = divisor.length, rem = '0', quotent = '';
var dvnd = (dividend.indexOf('.') > -1 && dividend.indexOf('.') < dl) ? dividend.substring(0, dl + 1) : dividend.substring(0, dl);
dividend = (dividend.indexOf('.') > -1 && dividend.indexOf('.') < dl) ? dividend.substring(dl + 1) : dividend.substring(dl);
if (dvnd.indexOf('.') > -1) {
var shift = dvnd.length - dvnd.indexOf('.') - 1;
dvnd = dvnd.replace('.', '');
if (dl > dvnd.length) {
shift += dl - dvnd.length;
dvnd = dvnd + (new Array(dl - dvnd.length + 1)).join('0');
}
prec = shift;
quotent = '0.' + (new Array(shift)).join('0');
}
precission = precission + 2;
while (prec <= precission) {
var qt = 0;
while (parseInt(dvnd) >= parseInt(divisor)) {
dvnd = (0, add_1.add)(dvnd, '-' + divisor);
qt++;
}
quotent += qt;
if (!dividend) {
if (!prec)
quotent += '.';
prec++;
dvnd = dvnd + '0';
}
else {
if (dividend[0] == '.') {
quotent += '.';
prec++;
dividend = dividend.substring(1);
}
dvnd = dvnd + dividend.substring(0, 1);
dividend = dividend.substring(1);
}
}
return ((neg == 1) ? '-' : '') + (0, add_1.trim)((0, round_1.roundOff)(quotent, precission - 2, mode));
}
exports.divide = divide;
/***/ }),
/***/ 213:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.modulus = void 0;
var divide_1 = __webpack_require__(415);
var round_1 = __webpack_require__(350);
var multiply_1 = __webpack_require__(182);
var subtract_1 = __webpack_require__(26);
var roundingModes_1 = __webpack_require__(916);
function modulus(dividend, divisor) {
if (divisor == 0) {
throw new Error('Cannot divide by 0');
}
dividend = dividend.toString();
divisor = divisor.toString();
validate(dividend);
validate(divisor);
var sign = '';
if (dividend[0] == '-') {
sign = '-';
dividend = dividend.substr(1);
}
if (divisor[0] == '-') {
divisor = divisor.substr(1);
}
var result = (0, subtract_1.subtract)(dividend, (0, multiply_1.multiply)(divisor, (0, round_1.roundOff)((0, divide_1.divide)(dividend, divisor), 0, roundingModes_1.RoundingModes.FLOOR)));
return sign + result;
}
exports.modulus = modulus;
function validate(oparand) {
if (oparand.indexOf('.') != -1) {
throw new Error('Modulus of non-integers not supported');
}
}
/***/ }),
/***/ 182:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.multiply = void 0;
var stripTrailingZero_1 = __webpack_require__(859);
function multiply(number1, number2) {
number1 = number1.toString();
number2 = number2.toString();
/*Filter numbers*/
var negative = 0;
if (number1[0] == '-') {
negative++;
number1 = number1.substr(1);
}
if (number2[0] == '-') {
negative++;
number2 = number2.substr(1);
}
number1 = (0, stripTrailingZero_1.stripTrailingZero)(number1);
number2 = (0, stripTrailingZero_1.stripTrailingZero)(number2);
var decimalLength1 = 0;
var decimalLength2 = 0;
if (number1.indexOf('.') != -1) {
decimalLength1 = number1.length - number1.indexOf('.') - 1;
}
if (number2.indexOf('.') != -1) {
decimalLength2 = number2.length - number2.indexOf('.') - 1;
}
var decimalLength = decimalLength1 + decimalLength2;
number1 = (0, stripTrailingZero_1.stripTrailingZero)(number1.replace('.', ''));
number2 = (0, stripTrailingZero_1.stripTrailingZero)(number2.replace('.', ''));
if (number1.length < number2.length) {
var temp = number1;
number1 = number2;
number2 = temp;
}
if (number2 == '0') {
return '0';
}
/*
* Core multiplication
*/
var length = number2.length;
var carry = 0;
var positionVector = [];
var currentPosition = length - 1;
var result = "";
for (var i = 0; i < length; i++) {
positionVector[i] = number1.length - 1;
}
for (var i = 0; i < 2 * number1.length; i++) {
var sum = 0;
for (var j = number2.length - 1; j >= currentPosition && j >= 0; j--) {
if (positionVector[j] > -1 && positionVector[j] < number1.length) {
sum += parseInt(number1[positionVector[j]--]) * parseInt(number2[j]);
}
}
sum += carry;
carry = Math.floor(sum / 10);
result = sum % 10 + result;
currentPosition--;
}
/*
* Formatting result
*/
result = (0, stripTrailingZero_1.stripTrailingZero)(adjustDecimal(result, decimalLength));
if (negative == 1) {
result = '-' + result;
}
return result;
}
exports.multiply = multiply;
/*
* Add decimal point
*/
function adjustDecimal(number, decimal) {
if (decimal == 0)
return number;
else {
number = (decimal >= number.length) ? ((new Array(decimal - number.length + 1)).join('0') + number) : number;
return number.substr(0, number.length - decimal) + '.' + number.substr(number.length - decimal, decimal);
}
}
/***/ }),
/***/ 350:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.roundOff = void 0;
var roundingModes_1 = __webpack_require__(916);
/**
*
* @param input the number to round
* @param n precision
* @param mode Rounding Mode
*/
function roundOff(input, n, mode) {
if (n === void 0) { n = 0; }
if (mode === void 0) { mode = roundingModes_1.RoundingModes.HALF_EVEN; }
if (mode === roundingModes_1.RoundingModes.UNNECESSARY) {
throw new Error("UNNECESSARY Rounding Mode has not yet been implemented");
}
if (typeof (input) == 'number' || typeof (input) == 'bigint')
input = input.toString();
var neg = false;
if (input[0] === '-') {
neg = true;
input = input.substring(1);
}
var parts = input.split('.'), partInt = parts[0], partDec = parts[1];
//handle case of -ve n: roundOff(12564,-2)=12600
if (n < 0) {
n = -n;
if (partInt.length <= n)
return '0';
else {
var prefix = partInt.substr(0, partInt.length - n);
input = prefix + '.' + partInt.substr(partInt.length - n) + partDec;
prefix = roundOff(input, 0, mode);
return (neg ? '-' : '') + prefix + (new Array(n + 1).join('0'));
}
}
// handle case when integer output is desired
if (n == 0) {
var l = partInt.length;
if (greaterThanFive(parts[1], partInt, neg, mode)) {
partInt = increment(partInt);
}
return (neg && parseInt(partInt) ? '-' : '') + partInt;
}
// handle case when n>0
if (!parts[1]) {
return (neg ? '-' : '') + partInt + '.' + (new Array(n + 1).join('0'));
}
else if (parts[1].length < n) {
return (neg ? '-' : '') + partInt + '.' + parts[1] + (new Array(n - parts[1].length + 1).join('0'));
}
partDec = parts[1].substring(0, n);
var rem = parts[1].substring(n);
if (rem && greaterThanFive(rem, partDec, neg, mode)) {
partDec = increment(partDec);
if (partDec.length > n) {
return (neg ? '-' : '') + increment(partInt, parseInt(partDec[0])) + '.' + partDec.substring(1);
}
}
return (neg && (parseInt(partInt) || parseInt(partDec)) ? '-' : '') + partInt + '.' + partDec;
}
exports.roundOff = roundOff;
function greaterThanFive(part, pre, neg, mode) {
if (!part || part === new Array(part.length + 1).join('0'))
return false;
// #region UP, DOWN, CEILING, FLOOR
if (mode === roundingModes_1.RoundingModes.DOWN || (!neg && mode === roundingModes_1.RoundingModes.FLOOR) ||
(neg && mode === roundingModes_1.RoundingModes.CEILING))
return false;
if (mode === roundingModes_1.RoundingModes.UP || (neg && mode === roundingModes_1.RoundingModes.FLOOR) ||
(!neg && mode === roundingModes_1.RoundingModes.CEILING))
return true;
// #endregion
// case when part !== five
var five = '5' + (new Array(part.length).join('0'));
if (part > five)
return true;
else if (part < five)
return false;
// case when part === five
switch (mode) {
case roundingModes_1.RoundingModes.HALF_DOWN: return false;
case roundingModes_1.RoundingModes.HALF_UP: return true;
case roundingModes_1.RoundingModes.HALF_EVEN:
default: return (parseInt(pre[pre.length - 1]) % 2 == 1);
}
}
function increment(part, c) {
if (c === void 0) { c = 0; }
if (!c)
c = 1;
if (typeof (part) == 'number')
part.toString();
var l = part.length - 1, s = '';
for (var i = l; i >= 0; i--) {
var x = parseInt(part[i]) + c;
if (x == 10) {
c = 1;
x = 0;
}
else {
c = 0;
}
s += x;
}
if (c)
s += c;
return s.split('').reverse().join('');
}
/***/ }),
/***/ 916:
/***/ (function(__unused_webpack_module, exports) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.RoundingModes = void 0;
var RoundingModes;
(function (RoundingModes) {
/**
* Rounding mode to round towards positive infinity.
*/
RoundingModes[RoundingModes["CEILING"] = 0] = "CEILING";
/**
* Rounding mode to round towards zero.
*/
RoundingModes[RoundingModes["DOWN"] = 1] = "DOWN";
/**
* Rounding mode to round towards negative infinity.
*/
RoundingModes[RoundingModes["FLOOR"] = 2] = "FLOOR";
/**
* Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant,
* in which case round down.
*/
RoundingModes[RoundingModes["HALF_DOWN"] = 3] = "HALF_DOWN";
/**
* Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant,
* in which case, round towards the even neighbor.
*/
RoundingModes[RoundingModes["HALF_EVEN"] = 4] = "HALF_EVEN";
/**
* Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant,
* in which case round up.
*/
RoundingModes[RoundingModes["HALF_UP"] = 5] = "HALF_UP";
/**
* Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary.
* UNIMPLEMENTED
*/
RoundingModes[RoundingModes["UNNECESSARY"] = 6] = "UNNECESSARY";
/**
* Rounding mode to round away from zero.
*/
RoundingModes[RoundingModes["UP"] = 7] = "UP";
})(RoundingModes = exports.RoundingModes || (exports.RoundingModes = {}));
/***/ }),
/***/ 859:
/***/ (function(__unused_webpack_module, exports) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.stripTrailingZero = void 0;
/*
* Removes zero from front and back*/
function stripTrailingZero(number) {
var isNegative = number[0] === '-';
if (isNegative) {
number = number.substr(1);
}
while (number[0] == '0') {
number = number.substr(1);
}
if (number.indexOf('.') != -1) {
while (number[number.length - 1] == '0') {
number = number.substr(0, number.length - 1);
}
}
if (number == "" || number == ".") {
number = '0';
}
else if (number[number.length - 1] == '.') {
number = number.substr(0, number.length - 1);
}
if (number[0] == '.') {
number = '0' + number;
}
if (isNegative && number != '0') {
number = '-' + number;
}
return number;
}
exports.stripTrailingZero = stripTrailingZero;
/***/ }),
/***/ 26:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.negate = exports.subtract = void 0;
var add_1 = __webpack_require__(217);
function subtract(number1, number2) {
number1 = number1.toString();
number2 = number2.toString();
number2 = negate(number2);
return (0, add_1.add)(number1, number2);
}
exports.subtract = subtract;
function negate(number) {
if (number[0] == '-') {
number = number.substr(1);
}
else {
number = '-' + number;
}
return number;
}
exports.negate = negate;
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
!function() {
var exports = __webpack_exports__;
var __webpack_unused_export__;
__webpack_unused_export__ = ({ value: true });
__webpack_unused_export__ = void 0;
var add_1 = __webpack_require__(217);
var abs_1 = __webpack_require__(165);
var round_1 = __webpack_require__(350);
var multiply_1 = __webpack_require__(182);
var divide_1 = __webpack_require__(415);
var modulus_1 = __webpack_require__(213);
var compareTo_1 = __webpack_require__(664);
var subtract_1 = __webpack_require__(26);
var roundingModes_1 = __webpack_require__(916);
var stripTrailingZero_1 = __webpack_require__(859);
var bigDecimal = /** @class */ (function () {
function bigDecimal(number) {
if (number === void 0) { number = "0"; }
this.value = bigDecimal.validate(number);
}
bigDecimal.validate = function (number) {
if (number) {
number = number.toString();
if (isNaN(number))
throw Error("Parameter is not a number: " + number);
if (number[0] == "+")
number = number.substring(1);
}
else
number = "0";
//handle missing leading zero
if (number.startsWith("."))
number = "0" + number;
else if (number.startsWith("-."))
number = "-0" + number.substr(1);
//handle exponentiation
if (/e/i.test(number)) {
var _a = number.split(/[eE]/), mantisa = _a[0], exponent = _a[1];
mantisa = (0, add_1.trim)(mantisa);
var sign = "";
if (mantisa[0] == "-") {
sign = "-";
mantisa = mantisa.substring(1);
}
if (mantisa.indexOf(".") >= 0) {
exponent = parseInt(exponent) + mantisa.indexOf(".");
mantisa = mantisa.replace(".", "");
}
else {
exponent = parseInt(exponent) + mantisa.length;
}
if (mantisa.length < exponent) {
number =
sign + mantisa + new Array(exponent - mantisa.length + 1).join("0");
}
else if (mantisa.length >= exponent && exponent > 0) {
number =
sign +
(0, add_1.trim)(mantisa.substring(0, exponent)) +
(mantisa.length > exponent ? "." + mantisa.substring(exponent) : "");
}
else {
number = sign + "0." + new Array(-exponent + 1).join("0") + mantisa;
}
}
return number;
};
bigDecimal.prototype.getValue = function () {
return this.value;
};
bigDecimal.prototype.setValue = function (num) {
this.value = bigDecimal.validate(num);
};
bigDecimal.getPrettyValue = function (number, digits, separator) {
if (digits === void 0) { digits = 3; }
if (separator === void 0) { separator = ","; }
// if (!(digits || separator)) {
// digits = 3;
// separator = ',';
// } else if (!(digits && separator)) {
// throw Error('Illegal Arguments. Should pass both digits and separator or pass none');
// }
number = bigDecimal.validate(number);
var neg = number.charAt(0) == "-";
if (neg)
number = number.substring(1);
var len = number.indexOf(".");
len = len > 0 ? len : number.length;
var temp = "";
for (var i = len; i > 0;) {
if (i < digits) {
digits = i;
i = 0;
}
else
i -= digits;
temp =
number.substring(i, i + digits) +
(i < len - digits && i >= 0 ? separator : "") +
temp;
}
return (neg ? "-" : "") + temp + number.substring(len);
};
bigDecimal.prototype.getPrettyValue = function (digits, separator) {
if (digits === void 0) { digits = 3; }
if (separator === void 0) { separator = ","; }
return bigDecimal.getPrettyValue(this.value, digits, separator);
};
bigDecimal.round = function (number, precision, mode) {
if (precision === void 0) { precision = 0; }
if (mode === void 0) { mode = roundingModes_1.RoundingModes.HALF_EVEN; }
number = bigDecimal.validate(number);
// console.log(number)
if (isNaN(precision))
throw Error("Precision is not a number: " + precision);
return (0, round_1.roundOff)(number, precision, mode);
};
bigDecimal.prototype.round = function (precision, mode) {
if (precision === void 0) { precision = 0; }
if (mode === void 0) { mode = roundingModes_1.RoundingModes.HALF_EVEN; }
if (isNaN(precision))
throw Error("Precision is not a number: " + precision);
return new bigDecimal((0, round_1.roundOff)(this.value, precision, mode));
};
bigDecimal.abs = function (number) {
number = bigDecimal.validate(number);
return (0, abs_1.abs)(number);
};
bigDecimal.prototype.abs = function () {
return new bigDecimal((0, abs_1.abs)(this.value));
};
bigDecimal.floor = function (number) {
number = bigDecimal.validate(number);
if (number.indexOf(".") === -1)
return number;
return bigDecimal.round(number, 0, roundingModes_1.RoundingModes.FLOOR);
};
bigDecimal.prototype.floor = function () {
if (this.value.indexOf(".") === -1)
return new bigDecimal(this.value);
return new bigDecimal(this.value).round(0, roundingModes_1.RoundingModes.FLOOR);
};
bigDecimal.ceil = function (number) {
number = bigDecimal.validate(number);
if (number.indexOf(".") === -1)
return number;
return bigDecimal.round(number, 0, roundingModes_1.RoundingModes.CEILING);
};
bigDecimal.prototype.ceil = function () {
if (this.value.indexOf(".") === -1)
return new bigDecimal(this.value);
return new bigDecimal(this.value).round(0, roundingModes_1.RoundingModes.CEILING);
};
bigDecimal.add = function (number1, number2) {
number1 = bigDecimal.validate(number1);
number2 = bigDecimal.validate(number2);
return (0, add_1.add)(number1, number2);
};
bigDecimal.prototype.add = function (number) {
return new bigDecimal((0, add_1.add)(this.value, number.getValue()));
};
bigDecimal.subtract = function (number1, number2) {
number1 = bigDecimal.validate(number1);
number2 = bigDecimal.validate(number2);
return (0, subtract_1.subtract)(number1, number2);
};
bigDecimal.prototype.subtract = function (number) {
return new bigDecimal((0, subtract_1.subtract)(this.value, number.getValue()));
};
bigDecimal.multiply = function (number1, number2) {
number1 = bigDecimal.validate(number1);
number2 = bigDecimal.validate(number2);
return (0, multiply_1.multiply)(number1, number2);
};
bigDecimal.prototype.multiply = function (number) {
return new bigDecimal((0, multiply_1.multiply)(this.value, number.getValue()));
};
bigDecimal.divide = function (number1, number2, precision, mode) {
number1 = bigDecimal.validate(number1);
number2 = bigDecimal.validate(number2);
return (0, divide_1.divide)(number1, number2, precision, mode);
};
bigDecimal.prototype.divide = function (number, precision, mode) {
return new bigDecimal((0, divide_1.divide)(this.value, number.getValue(), precision, mode));
};
bigDecimal.modulus = function (number1, number2) {
number1 = bigDecimal.validate(number1);
number2 = bigDecimal.validate(number2);
return (0, modulus_1.modulus)(number1, number2);
};
bigDecimal.prototype.modulus = function (number) {
return new bigDecimal((0, modulus_1.modulus)(this.value, number.getValue()));
};
bigDecimal.compareTo = function (number1, number2) {
number1 = bigDecimal.validate(number1);
number2 = bigDecimal.validate(number2);
return (0, compareTo_1.compareTo)(number1, number2);
};
bigDecimal.prototype.compareTo = function (number) {
return (0, compareTo_1.compareTo)(this.value, number.getValue());
};
bigDecimal.negate = function (number) {
number = bigDecimal.validate(number);
return (0, subtract_1.negate)(number);
};
bigDecimal.prototype.negate = function () {
return new bigDecimal((0, subtract_1.negate)(this.value));
};
bigDecimal.stripTrailingZero = function (number) {
number = bigDecimal.validate(number);
return (0, stripTrailingZero_1.stripTrailingZero)(number);
};
bigDecimal.prototype.stripTrailingZero = function () {
return new bigDecimal((0, stripTrailingZero_1.stripTrailingZero)(this.value));
};
bigDecimal.RoundingModes = roundingModes_1.RoundingModes;
return bigDecimal;
}());
__webpack_unused_export__ = bigDecimal;
exports["default"] = bigDecimal;
}();
__webpack_exports__ = __webpack_exports__["default"];
/******/ return __webpack_exports__;
/******/ })()
;
});