From 5a47b163b831b588cdc912ede54ef83c61bbb2d3 Mon Sep 17 00:00:00 2001 From: Niladri Date: Sun, 21 Jan 2024 11:33:36 +0530 Subject: [PATCH] 122 function compareto fails when comparing -0 and 0 (#124) * fix -0 and 0 compare --- dist/esm/big-decimal.js | 7 ++++--- dist/esm/big-decimal.js.map | 2 +- dist/node/js-big-decimal.js | 10 +++++++--- dist/node/js-big-decimal.min.js | 2 +- dist/web/js-big-decimal.js | 10 +++++++--- dist/web/js-big-decimal.min.js | 2 +- package-lock.json | 4 ++-- package.json | 2 +- src/compareTo.spec.ts | 3 +++ src/compareTo.ts | 6 ++++++ src/stripTrailingZero.spec.ts | 15 +++++++++++++++ src/stripTrailingZero.ts | 2 +- 12 files changed, 49 insertions(+), 16 deletions(-) diff --git a/dist/esm/big-decimal.js b/dist/esm/big-decimal.js index 463d599..149bdf2 100644 --- a/dist/esm/big-decimal.js +++ b/dist/esm/big-decimal.js @@ -292,7 +292,7 @@ function stripTrailingZero(number) { if (number[0] == '.') { number = '0' + number; } - if (isNegative) { + if (isNegative && number != '0') { number = '-' + number; } return number; @@ -501,8 +501,9 @@ function validate(oparand) { } function compareTo(number1, number2) { - var _a; + var _a, _b; var negative = false; + _a = [number1, number2].map(function (n) { return stripTrailingZero(n); }), number1 = _a[0], number2 = _a[1]; if (number1[0] == '-' && number2[0] != "-") { return -1; } @@ -514,7 +515,7 @@ function compareTo(number1, number2) { number2 = number2.substr(1); negative = true; } - _a = pad(number1, number2), number1 = _a[0], number2 = _a[1]; + _b = pad(number1, number2), number1 = _b[0], number2 = _b[1]; if (number1.localeCompare(number2) == 0) { return 0; } diff --git a/dist/esm/big-decimal.js.map b/dist/esm/big-decimal.js.map index 4401266..1357735 100644 --- a/dist/esm/big-decimal.js.map +++ b/dist/esm/big-decimal.js.map @@ -1 +1 @@ -{"version":3,"file":"big-decimal.js","sources":["../../../src/add.ts","../../../src/abs.ts","../../../src/roundingModes.ts","../../../src/round.ts","../../../src/stripTrailingZero.ts","../../../src/multiply.ts","../../../src/divide.ts","../../../src/subtract.ts","../../../src/modulus.ts","../../../src/compareTo.ts","../../../src/big-decimal.ts"],"sourcesContent":["//function add {\r\nexport function add(number1: string, number2 = \"0\") {\r\n let neg = 0,\r\n ind = -1,\r\n neg_len;\r\n\r\n //check for negatives\r\n if (number1[0] == \"-\") {\r\n number1 = number1.substring(1);\r\n if (!testZero(number1)) {\r\n neg++;\r\n ind = 1;\r\n neg_len = number1.length;\r\n }\r\n }\r\n if (number2[0] == \"-\") {\r\n number2 = number2.substring(1);\r\n if (!testZero(number2)) {\r\n neg++;\r\n ind = 2;\r\n neg_len = number2.length;\r\n }\r\n }\r\n\r\n number1 = trim(number1);\r\n number2 = trim(number2);\r\n\r\n [number1, number2] = pad(trim(number1), trim(number2));\r\n\r\n if (neg == 1) {\r\n if (ind === 1) number1 = compliment(number1);\r\n else if (ind === 2) number2 = compliment(number2);\r\n }\r\n\r\n let res = addCore(number1, number2);\r\n if (!neg) return trim(res);\r\n else if (neg == 2) return \"-\" + trim(res);\r\n else {\r\n if (number1.length < res.length) return trim(res.substring(1));\r\n else return \"-\" + trim(compliment(res));\r\n }\r\n}\r\n\r\nfunction compliment(number: string) {\r\n if (testZero(number)) {\r\n return number;\r\n }\r\n\r\n let s = \"\",\r\n l = number.length,\r\n dec = number.split(\".\")[1],\r\n ld = dec ? dec.length : 0;\r\n\r\n for (let i = 0; i < l; i++) {\r\n if (number[i] >= \"0\" && number[i] <= \"9\") s += 9 - parseInt(number[i]);\r\n else s += number[i];\r\n }\r\n\r\n let one = ld > 0 ? \"0.\" + new Array(ld).join(\"0\") + \"1\" : \"1\";\r\n\r\n return addCore(s, one);\r\n}\r\n\r\nexport function trim(number: string) {\r\n let parts = number.split(\".\");\r\n\r\n if (!parts[0]) parts[0] = \"0\";\r\n\r\n while (parts[0][0] == \"0\" && parts[0].length > 1)\r\n parts[0] = parts[0].substring(1);\r\n\r\n return parts[0] + (parts[1] ? \".\" + parts[1] : \"\");\r\n}\r\n\r\nexport function pad(number1: string, number2: string) {\r\n let parts1 = number1.split(\".\"),\r\n parts2 = number2.split(\".\");\r\n\r\n //pad integral part\r\n let length1 = parts1[0].length,\r\n length2 = parts2[0].length;\r\n if (length1 > length2) {\r\n parts2[0] =\r\n new Array(Math.abs(length1 - length2) + 1).join(\"0\") +\r\n (parts2[0] ? parts2[0] : \"\");\r\n } else {\r\n parts1[0] =\r\n new Array(Math.abs(length1 - length2) + 1).join(\"0\") +\r\n (parts1[0] ? parts1[0] : \"\");\r\n }\r\n\r\n //pad fractional part\r\n (length1 = parts1[1] ? parts1[1].length : 0),\r\n (length2 = parts2[1] ? parts2[1].length : 0);\r\n if (length1 || length2) {\r\n if (length1 > length2) {\r\n parts2[1] =\r\n (parts2[1] ? parts2[1] : \"\") +\r\n new Array(Math.abs(length1 - length2) + 1).join(\"0\");\r\n } else {\r\n parts1[1] =\r\n (parts1[1] ? parts1[1] : \"\") +\r\n new Array(Math.abs(length1 - length2) + 1).join(\"0\");\r\n }\r\n }\r\n\r\n number1 = parts1[0] + (parts1[1] ? \".\" + parts1[1] : \"\");\r\n number2 = parts2[0] + (parts2[1] ? \".\" + parts2[1] : \"\");\r\n\r\n return [number1, number2];\r\n}\r\n\r\nfunction addCore(number1: string, number2: string) {\r\n [number1, number2] = pad(number1, number2);\r\n\r\n let sum = \"\",\r\n carry = 0;\r\n\r\n for (let i = number1.length - 1; i >= 0; i--) {\r\n if (number1[i] === \".\") {\r\n sum = \".\" + sum;\r\n continue;\r\n }\r\n let temp = parseInt(number1[i]) + parseInt(number2[i]) + carry;\r\n sum = (temp % 10) + sum;\r\n carry = Math.floor(temp / 10);\r\n }\r\n\r\n return carry ? carry.toString() + sum : sum;\r\n}\r\n\r\nfunction testZero(number: string) {\r\n return /^0[0]*[.]{0,1}[0]*$/.test(number);\r\n}\r\n","export function abs(n: number | string | bigint) {\r\n if (typeof n == \"number\" || typeof n == \"bigint\") n = n.toString();\r\n if (n[0] == \"-\") return n.substring(1);\r\n return n;\r\n}\r\n","export enum RoundingModes {\r\n /**\r\n * Rounding mode to round towards positive infinity.\r\n */\r\n CEILING,\r\n\r\n /**\r\n * Rounding mode to round towards zero.\r\n */\r\n DOWN,\r\n\r\n /**\r\n * Rounding mode to round towards negative infinity.\r\n */\r\n FLOOR,\r\n\r\n /**\r\n * Rounding mode to round towards \"nearest neighbor\" unless both neighbors are equidistant, \r\n * in which case round down.\r\n */\r\n HALF_DOWN,\r\n\r\n /**\r\n * Rounding mode to round towards the \"nearest neighbor\" unless both neighbors are equidistant, \r\n * in which case, round towards the even neighbor.\r\n */\r\n HALF_EVEN,\r\n\r\n /**\r\n * Rounding mode to round towards \"nearest neighbor\" unless both neighbors are equidistant, \r\n * in which case round up.\r\n */\r\n HALF_UP,\r\n\r\n /**\r\n * Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary.\r\n * UNIMPLEMENTED\r\n */\r\n UNNECESSARY,\r\n\r\n /**\r\n * Rounding mode to round away from zero.\r\n */\r\n UP\r\n}\r\n\r\n","import { RoundingModes } from './roundingModes';\r\n/**\r\n * \r\n * @param input the number to round\r\n * @param n precision\r\n * @param mode Rounding Mode\r\n */\r\nexport function roundOff(input: number | string | bigint, n: number = 0, mode=RoundingModes.HALF_EVEN) {\r\n if (mode === RoundingModes.UNNECESSARY) {\r\n throw new Error(\"UNNECESSARY Rounding Mode has not yet been implemented\");\r\n }\r\n\r\n if (typeof (input) == 'number' || typeof (input) == 'bigint')\r\n input = input.toString();\r\n\r\n let neg = false;\r\n if (input[0] === '-') {\r\n neg = true;\r\n input = input.substring(1);\r\n }\r\n\r\n let parts = input.split('.'),\r\n partInt = parts[0],\r\n partDec = parts[1];\r\n\r\n //handle case of -ve n: roundOff(12564,-2)=12600\r\n if (n < 0) {\r\n n = -n;\r\n if (partInt.length <= n)\r\n return '0';\r\n else {\r\n let prefix = partInt.substr(0, partInt.length - n);\r\n input = prefix + '.' + partInt.substr(partInt.length - n) + partDec;\r\n prefix = roundOff(input, 0, mode);\r\n return (neg ? '-' : '') + prefix + (new Array(n + 1).join('0'));\r\n }\r\n }\r\n\r\n\r\n // handle case when integer output is desired\r\n if (n == 0) {\r\n let l = partInt.length;\r\n if (greaterThanFive(parts[1], partInt, neg, mode)) {\r\n partInt = increment(partInt);\r\n }\r\n return (neg&&parseInt(partInt) ? '-' : '') + partInt;\r\n }\r\n\r\n\r\n // handle case when n>0\r\n if (!parts[1]) {\r\n return (neg ? '-' : '') + partInt + '.' + (new Array(n + 1).join('0'));\r\n } else if (parts[1].length < n) {\r\n return (neg ? '-' : '') + partInt + '.' + parts[1] + (new Array(n - parts[1].length + 1).join('0'));\r\n }\r\n\r\n partDec = parts[1].substring(0, n);\r\n let rem = parts[1].substring(n);\r\n\r\n if (rem && greaterThanFive(rem, partDec, neg, mode)) {\r\n partDec = increment(partDec);\r\n if (partDec.length > n) {\r\n return (neg ? '-' : '') + increment(partInt, parseInt(partDec[0])) + '.' + partDec.substring(1);\r\n }\r\n }\r\n return (neg&&(parseInt(partInt) || parseInt(partDec)) ? '-' : '') + partInt + '.' + partDec;\r\n}\r\n\r\nfunction greaterThanFive(part: string, pre: string, neg: boolean, mode: RoundingModes) {\r\n if (!part || part === new Array(part.length + 1).join('0'))\r\n return false;\r\n\r\n // #region UP, DOWN, CEILING, FLOOR \r\n if (mode === RoundingModes.DOWN || (!neg && mode === RoundingModes.FLOOR) ||\r\n (neg && mode === RoundingModes.CEILING))\r\n return false;\r\n\r\n if (mode === RoundingModes.UP || (neg && mode === RoundingModes.FLOOR) ||\r\n (!neg && mode === RoundingModes.CEILING))\r\n return true;\r\n // #endregion\r\n\r\n // case when part !== five\r\n let five = '5' + (new Array(part.length).join('0'));\r\n if (part > five)\r\n return true;\r\n else if (part < five)\r\n return false;\r\n\r\n // case when part === five\r\n switch (mode) {\r\n case RoundingModes.HALF_DOWN: return false;\r\n case RoundingModes.HALF_UP: return true;\r\n case RoundingModes.HALF_EVEN:\r\n default: return (parseInt(pre[pre.length - 1]) % 2 == 1)\r\n }\r\n}\r\n\r\nfunction increment(part, c: number = 0) {\r\n if (!c)\r\n c = 1;\r\n if (typeof (part) == 'number')\r\n part.toString();\r\n\r\n let l = part.length - 1,\r\n s = '';\r\n\r\n for (let i = l; i >= 0; i--) {\r\n let x = parseInt(part[i]) + c;\r\n if (x == 10) {\r\n c = 1; x = 0;\r\n } else {\r\n c = 0;\r\n }\r\n s += x;\r\n }\r\n if (c)\r\n s += c;\r\n\r\n return s.split('').reverse().join('');\r\n}","/*\r\n* Removes zero from front and back*/\r\nexport function stripTrailingZero(number) {\r\n\tconst isNegative = number[0] === '-';\r\n\tif (isNegative) {\r\n\t\tnumber = number.substr(1);\r\n\t}\r\n\twhile (number[0] == '0') {\r\n\t\tnumber = number.substr(1);\r\n\t}\r\n\tif (number.indexOf('.') != -1) {\r\n\t\twhile (number[number.length - 1] == '0') {\r\n\t\t\tnumber = number.substr(0, number.length - 1);\r\n\t\t}\r\n\t}\r\n\tif (number == \"\" || number == \".\") {\r\n\t\tnumber = '0';\r\n\t} else if (number[number.length - 1] == '.') {\r\n\t\tnumber = number.substr(0, number.length - 1);\r\n\t}\r\n\tif (number[0] == '.') {\r\n\t\tnumber = '0' + number;\r\n\t}\r\n\tif (isNegative) {\r\n\t\tnumber = '-' + number;\r\n\t}\r\n\treturn number;\r\n}","import { stripTrailingZero } from \"./stripTrailingZero\"\r\n\r\nexport function multiply(number1, number2) {\r\n\tnumber1 = number1.toString();\r\n\tnumber2 = number2.toString();\r\n\r\n\t/*Filter numbers*/\r\n\tlet negative = 0;\r\n\tif (number1[0] == '-') {\r\n\t\tnegative++;\r\n\t\tnumber1 = number1.substr(1);\r\n\t}\r\n\tif (number2[0] == '-') {\r\n\t\tnegative++;\r\n\t\tnumber2 = number2.substr(1);\r\n\t}\r\n\tnumber1 = stripTrailingZero(number1);\r\n\tnumber2 = stripTrailingZero(number2);\r\n\tlet decimalLength1 = 0;\r\n\tlet decimalLength2 = 0;\r\n\r\n\tif (number1.indexOf('.') != -1) {\r\n\t\tdecimalLength1 = number1.length - number1.indexOf('.') - 1;\r\n\t}\r\n\r\n\tif (number2.indexOf('.') != -1) {\r\n\t\tdecimalLength2 = number2.length - number2.indexOf('.') - 1;\r\n\t}\r\n\tlet decimalLength = decimalLength1 + decimalLength2;\r\n\tnumber1 = stripTrailingZero(number1.replace('.', ''));\r\n\tnumber2 = stripTrailingZero(number2.replace('.', ''));\r\n\r\n\tif (number1.length < number2.length) {\r\n\t\tlet temp = number1;\r\n\t\tnumber1 = number2;\r\n\t\tnumber2 = temp;\r\n\t}\r\n\r\n\tif (number2 == '0') {\r\n\t\treturn '0';\r\n\t}\r\n\r\n\t/*\r\n\t* Core multiplication\r\n\t*/\r\n\tlet length = number2.length;\r\n\tlet carry = 0;\r\n\tlet positionVector = [];\r\n\tlet currentPosition = length - 1;\r\n\r\n\tlet result = \"\";\r\n\tfor (let i = 0; i < length; i++) {\r\n\t\tpositionVector[i] = number1.length - 1;\r\n\t}\r\n\tfor (let i = 0; i < 2 * number1.length; i++) {\r\n\t\tlet sum = 0;\r\n\t\tfor (let j = number2.length - 1; j >= currentPosition && j >= 0; j--) {\r\n\t\t\tif (positionVector[j] > -1 && positionVector[j] < number1.length) {\r\n\t\t\t\tsum += parseInt(number1[positionVector[j]--]) * parseInt(number2[j]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tsum += carry;\r\n\t\tcarry = Math.floor(sum / 10);\r\n\t\tresult = sum % 10 + result;\r\n\t\tcurrentPosition--;\r\n\t}\r\n\t/*\r\n\t* Formatting result\r\n\t*/\r\n\tresult = stripTrailingZero(adjustDecimal(result, decimalLength));\r\n\tif (negative == 1) {\r\n\t\tresult = '-' + result;\r\n\t}\r\n\treturn result;\r\n}\r\n\r\n/*\r\n* Add decimal point\r\n*/\r\nfunction adjustDecimal(number, decimal) {\r\n\tif (decimal == 0)\r\n\t\treturn number;\r\n\telse {\r\n\t\tnumber = (decimal >= number.length) ? ((new Array(decimal - number.length + 1)).join('0') + number) : number;\r\n\t\treturn number.substr(0, number.length - decimal) + '.' + number.substr(number.length - decimal, decimal)\r\n\t}\r\n}\r\n","import { add, trim } from './add';\r\nimport { roundOff } from './round';\r\n\r\nexport function divide(dividend, divisor, precission = 8) {\r\n if (divisor == 0) {\r\n throw new Error('Cannot divide by 0');\r\n }\r\n\r\n dividend = dividend.toString();\r\n divisor = divisor.toString();\r\n\r\n // remove trailing zeros in decimal ISSUE#18\r\n dividend = dividend.replace(/(\\.\\d*?[1-9])0+$/g, \"$1\").replace(/\\.0+$/, \"\");\r\n divisor = divisor.replace(/(\\.\\d*?[1-9])0+$/g, \"$1\").replace(/\\.0+$/, \"\");\r\n\r\n if (dividend == 0)\r\n return '0';\r\n\r\n let neg = 0;\r\n if (divisor[0] == '-') {\r\n divisor = divisor.substring(1);\r\n neg++;\r\n }\r\n if (dividend[0] == '-') {\r\n dividend = dividend.substring(1);\r\n neg++;\r\n }\r\n\r\n var pt_dvsr = divisor.indexOf('.') > 0 ? divisor.length - divisor.indexOf('.') - 1 : -1;\r\n\r\n divisor = trim(divisor.replace('.', ''));\r\n if (pt_dvsr >= 0) {\r\n let pt_dvnd = dividend.indexOf('.') > 0 ? dividend.length - dividend.indexOf('.') - 1 : -1;\r\n\r\n if (pt_dvnd == -1) {\r\n dividend = trim(dividend + (new Array(pt_dvsr + 1)).join('0'));\r\n } else {\r\n if (pt_dvsr > pt_dvnd) {\r\n dividend = dividend.replace('.', '');\r\n dividend = trim(dividend + (new Array(pt_dvsr - pt_dvnd + 1)).join('0'));\r\n } else if (pt_dvsr < pt_dvnd) {\r\n dividend = dividend.replace('.', '');\r\n let loc = dividend.length - pt_dvnd + pt_dvsr;\r\n dividend = trim(dividend.substring(0, loc) + '.' + dividend.substring(loc));\r\n } else if (pt_dvsr == pt_dvnd) {\r\n dividend = trim(dividend.replace('.', ''));\r\n }\r\n }\r\n }\r\n\r\n let prec = 0, dl = divisor.length, rem = '0', quotent = '';\r\n let dvnd = (dividend.indexOf('.') > -1 && dividend.indexOf('.') < dl) ? dividend.substring(0, dl + 1) : dividend.substring(0, dl);\r\n dividend = (dividend.indexOf('.') > -1 && dividend.indexOf('.') < dl) ? dividend.substring(dl + 1) : dividend.substring(dl);\r\n \r\n if (dvnd.indexOf('.') > -1) {\r\n let shift = dvnd.length - dvnd.indexOf('.') - 1;\r\n dvnd = dvnd.replace('.', '');\r\n if (dl > dvnd.length) {\r\n shift += dl - dvnd.length;\r\n dvnd = dvnd + (new Array(dl - dvnd.length + 1)).join('0');\r\n }\r\n prec = shift;\r\n quotent = '0.' + (new Array(shift)).join('0');\r\n\r\n }\r\n\r\n precission = precission + 2;\r\n\r\n while (prec <= precission) {\r\n let qt = 0;\r\n while (parseInt(dvnd) >= parseInt(divisor)) {\r\n dvnd = add(dvnd, '-' + divisor);\r\n qt++;\r\n }\r\n quotent += qt;\r\n\r\n if (!dividend) {\r\n if (!prec)\r\n quotent += '.';\r\n prec++;\r\n dvnd = dvnd + '0';\r\n } else {\r\n if (dividend[0] == '.') {\r\n quotent += '.';\r\n prec++;\r\n dividend = dividend.substring(1);\r\n }\r\n dvnd = dvnd + dividend.substring(0, 1);\r\n dividend = dividend.substring(1);\r\n }\r\n }\r\n\r\n return ((neg == 1) ? '-' : '') + trim(roundOff(quotent, precission - 2));\r\n}","import { add } from './add';\r\n\r\nexport function subtract(number1, number2) {\r\n\tnumber1 = number1.toString();\r\n\tnumber2 = number2.toString();\r\n\tnumber2 = negate(number2);\r\n\treturn add(number1, number2);\r\n}\r\n\r\nexport function negate(number : string){\r\n\tif(number[0] == '-'){\r\n\t\tnumber = number.substr(1);\r\n\t}else{\r\n\t\tnumber = '-' + number;\r\n\t}\r\n\treturn number;\r\n}","import { divide } from './divide';\r\nimport { roundOff } from './round';\r\nimport { multiply } from './multiply';\r\nimport { subtract } from './subtract';\r\nimport { RoundingModes } from './roundingModes';\r\n\r\nexport function modulus(dividend: number|string, divisor:number|string) {\r\n if (divisor == 0) {\r\n throw new Error('Cannot divide by 0');\r\n }\r\n\r\n dividend = dividend.toString();\r\n divisor = divisor.toString();\r\n\r\n validate(dividend);\r\n validate(divisor);\r\n\r\n let sign = '';\r\n if(dividend[0] == '-'){\r\n sign = '-';\r\n dividend = dividend.substr(1);\r\n }\r\n if(divisor[0] == '-'){\r\n divisor = divisor.substr(1);\r\n }\r\n\r\n let result = subtract(dividend, multiply(divisor, roundOff(divide(dividend, divisor), 0, RoundingModes.FLOOR)));\r\n return sign+result;\r\n}\r\n\r\nfunction validate(oparand: string) {\r\n if (oparand.indexOf('.') != -1) {\r\n throw new Error('Modulus of non-integers not supported');\r\n }\r\n}\r\n","import { pad } from './add';\r\n\r\nexport function compareTo(number1 : string, number2 : string) {\r\n\tlet negative = false;\r\n\tif(number1[0] == '-' && number2[0] != \"-\"){\r\n\t\treturn -1;\r\n\t}else if(number1[0] != '-' && number2[0] == '-'){\r\n\t\treturn 1;\r\n\t}else if(number1[0] == '-' && number2[0] == '-'){\r\n\t\tnumber1 = number1.substr(1);\r\n\t\tnumber2 = number2.substr(1);\r\n\t\tnegative = true;\r\n\t}\r\n\t[number1, number2] = pad(number1, number2);\r\n\tif(number1.localeCompare(number2) == 0){\r\n\t\treturn 0;\r\n\t}\r\n\tfor(let i = 0 ; i < number1.length ; i++){\r\n\t\tif(number1[i] == number2[i]){\r\n\t\t\tcontinue;\r\n\t\t}else if(number1[i] > number2[i]){\r\n\t\t\tif(negative){\r\n\t\t\t\treturn -1;\r\n\t\t\t}else{\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(negative){\r\n\t\t\t\treturn 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn 0;\r\n}","import { add, trim } from \"./add\";\r\nimport { abs } from \"./abs\";\r\nimport { roundOff } from \"./round\";\r\nimport { multiply } from \"./multiply\";\r\nimport { divide } from \"./divide\";\r\nimport { modulus } from \"./modulus\";\r\nimport { compareTo } from \"./compareTo\";\r\nimport { subtract, negate } from \"./subtract\";\r\nimport { RoundingModes as Modes, RoundingModes } from \"./roundingModes\";\r\nimport { stripTrailingZero } from \"./stripTrailingZero\";\r\n\r\nclass bigDecimal {\r\n private value: string;\r\n static RoundingModes = Modes;\r\n\r\n private static validate(number): string {\r\n if (number) {\r\n number = number.toString();\r\n if (isNaN(number)) throw Error(\"Parameter is not a number: \" + number);\r\n\r\n if (number[0] == \"+\") number = number.substring(1);\r\n } else number = \"0\";\r\n\r\n //handle missing leading zero\r\n if (number.startsWith(\".\")) number = \"0\" + number;\r\n else if (number.startsWith(\"-.\")) number = \"-0\" + number.substr(1);\r\n\r\n //handle exponentiation\r\n if (/e/i.test(number)) {\r\n let [mantisa, exponent] = number.split(/[eE]/);\r\n mantisa = trim(mantisa);\r\n\r\n let sign = \"\";\r\n if (mantisa[0] == \"-\") {\r\n sign = \"-\";\r\n mantisa = mantisa.substring(1);\r\n }\r\n\r\n if (mantisa.indexOf(\".\") >= 0) {\r\n exponent = parseInt(exponent) + mantisa.indexOf(\".\");\r\n mantisa = mantisa.replace(\".\", \"\");\r\n } else {\r\n exponent = parseInt(exponent) + mantisa.length;\r\n }\r\n\r\n if (mantisa.length < exponent) {\r\n number =\r\n sign + mantisa + new Array(exponent - mantisa.length + 1).join(\"0\");\r\n } else if (mantisa.length >= exponent && exponent > 0) {\r\n number =\r\n sign +\r\n trim(mantisa.substring(0, exponent)) +\r\n (mantisa.length > exponent ? \".\" + mantisa.substring(exponent) : \"\");\r\n } else {\r\n number = sign + \"0.\" + new Array(-exponent + 1).join(\"0\") + mantisa;\r\n }\r\n }\r\n\r\n return number;\r\n }\r\n\r\n constructor(number: number | string | bigint = \"0\") {\r\n this.value = bigDecimal.validate(number);\r\n }\r\n\r\n getValue() {\r\n return this.value;\r\n }\r\n\r\n setValue(num: number | string | bigint) {\r\n this.value = bigDecimal.validate(num);\r\n }\r\n\r\n static getPrettyValue(number, digits = 3, separator = \",\"): string {\r\n // if (!(digits || separator)) {\r\n // digits = 3;\r\n // separator = ',';\r\n // } else if (!(digits && separator)) {\r\n // throw Error('Illegal Arguments. Should pass both digits and separator or pass none');\r\n // }\r\n number = bigDecimal.validate(number);\r\n let neg = number.charAt(0) == \"-\";\r\n if (neg) number = number.substring(1);\r\n var len = number.indexOf(\".\");\r\n len = len > 0 ? len : number.length;\r\n var temp = \"\";\r\n for (var i = len; i > 0; ) {\r\n if (i < digits) {\r\n digits = i;\r\n i = 0;\r\n } else i -= digits;\r\n\r\n temp =\r\n number.substring(i, i + digits) +\r\n (i < len - digits && i >= 0 ? separator : \"\") +\r\n temp;\r\n }\r\n return (neg ? \"-\" : \"\") + temp + number.substring(len);\r\n }\r\n getPrettyValue(digits = 3, separator = \",\") {\r\n return bigDecimal.getPrettyValue(this.value, digits, separator);\r\n }\r\n\r\n static round(number, precision = 0, mode = Modes.HALF_EVEN) {\r\n number = bigDecimal.validate(number);\r\n // console.log(number)\r\n if (isNaN(precision))\r\n throw Error(\"Precision is not a number: \" + precision);\r\n return roundOff(number, precision, mode);\r\n }\r\n\r\n round(precision = 0, mode = Modes.HALF_EVEN) {\r\n if (isNaN(precision))\r\n throw Error(\"Precision is not a number: \" + precision);\r\n\r\n return new bigDecimal(roundOff(this.value, precision, mode));\r\n }\r\n\r\n static abs(number) {\r\n number = bigDecimal.validate(number);\r\n return abs(number);\r\n }\r\n\r\n abs() {\r\n return new bigDecimal(abs(this.value));\r\n }\r\n\r\n static floor(number) {\r\n number = bigDecimal.validate(number);\r\n if (number.indexOf(\".\") === -1) return number;\r\n return bigDecimal.round(number, 0, RoundingModes.FLOOR);\r\n }\r\n\r\n floor() {\r\n if (this.value.indexOf(\".\") === -1) return new bigDecimal(this.value);\r\n return new bigDecimal(this.value).round(0, RoundingModes.FLOOR);\r\n }\r\n\r\n static ceil(number) {\r\n number = bigDecimal.validate(number);\r\n if (number.indexOf(\".\") === -1) return number;\r\n return bigDecimal.round(number, 0, RoundingModes.CEILING);\r\n }\r\n\r\n ceil() {\r\n if (this.value.indexOf(\".\") === -1) return new bigDecimal(this.value);\r\n return new bigDecimal(this.value).round(0, RoundingModes.CEILING);\r\n }\r\n\r\n static add(number1, number2) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return add(number1, number2);\r\n }\r\n\r\n add(number: bigDecimal) {\r\n return new bigDecimal(add(this.value, number.getValue()));\r\n }\r\n\r\n static subtract(number1, number2) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return subtract(number1, number2);\r\n }\r\n\r\n subtract(number: bigDecimal) {\r\n return new bigDecimal(subtract(this.value, number.getValue()));\r\n }\r\n\r\n static multiply(number1, number2) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return multiply(number1, number2);\r\n }\r\n\r\n multiply(number: bigDecimal) {\r\n return new bigDecimal(multiply(this.value, number.getValue()));\r\n }\r\n\r\n static divide(number1, number2, precision?: number) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return divide(number1, number2, precision);\r\n }\r\n\r\n divide(number: bigDecimal, precision?: number) {\r\n return new bigDecimal(divide(this.value, number.getValue(), precision));\r\n }\r\n\r\n static modulus(number1, number2) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return modulus(number1, number2);\r\n }\r\n\r\n modulus(number: bigDecimal) {\r\n return new bigDecimal(modulus(this.value, number.getValue()));\r\n }\r\n\r\n static compareTo(number1, number2) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return compareTo(number1, number2);\r\n }\r\n\r\n compareTo(number: bigDecimal) {\r\n return compareTo(this.value, number.getValue());\r\n }\r\n\r\n static negate(number) {\r\n number = bigDecimal.validate(number);\r\n return negate(number);\r\n }\r\n\r\n negate() {\r\n return new bigDecimal(negate(this.value));\r\n }\r\n\r\n static stripTrailingZero(number) {\r\n number = bigDecimal.validate(number);\r\n return stripTrailingZero(number);\r\n }\r\n\r\n stripTrailingZero() {\r\n return new bigDecimal(stripTrailingZero(this.value));\r\n }\r\n}\r\nexport default bigDecimal;\r\n"],"names":["Modes"],"mappings":"AAAA;AACgB,SAAA,GAAG,CAAC,OAAe,EAAE,OAAa,EAAA;;AAAb,IAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAa,GAAA,GAAA,CAAA,EAAA;IAC5C,IAAA,GAAG,GAAG,CAAC,CACT,CAAA,GAAG,GAAG,CAAC,CAAC,CACA;;AAGV,IAAA,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;AACrB,QAAA,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACtB,YAAA,GAAG,EAAE,CAAC;YACN,GAAG,GAAG,CAAC,CAAC;AACR,YAAU,OAAO,CAAC,MAAM,CAAC;AAC1B,SAAA;AACF,KAAA;AACD,IAAA,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;AACrB,QAAA,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACtB,YAAA,GAAG,EAAE,CAAC;YACN,GAAG,GAAG,CAAC,CAAC;AACR,YAAU,OAAO,CAAC,MAAM,CAAC;AAC1B,SAAA;AACF,KAAA;AAED,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AACxB,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAExB,IAAA,EAAA,GAAqB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAArD,OAAO,QAAA,EAAE,OAAO,QAAA,CAAsC;IAEvD,IAAI,GAAG,IAAI,CAAC,EAAE;QACZ,IAAI,GAAG,KAAK,CAAC;AAAE,YAAA,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;aACxC,IAAI,GAAG,KAAK,CAAC;AAAE,YAAA,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AACnD,KAAA;IAED,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACpC,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;SACtB,IAAI,GAAG,IAAI,CAAC;AAAE,QAAA,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,SAAA;AACH,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;;YAC1D,OAAO,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,KAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAA;AAChC,IAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpB,QAAA,OAAO,MAAM,CAAC;AACf,KAAA;AAED,IAAA,IAAI,CAAC,GAAG,EAAE,EACR,CAAC,GAAG,MAAM,CAAC,MAAM,EACjB,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC1B,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,QAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG;YAAE,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;AAClE,YAAA,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;AACrB,KAAA;IAED,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAE9D,IAAA,OAAO,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAEK,SAAU,IAAI,CAAC,MAAc,EAAA;IACjC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE9B,IAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAAE,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAE9B,IAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;AAC9C,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEnC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACrD,CAAC;AAEe,SAAA,GAAG,CAAC,OAAe,EAAE,OAAe,EAAA;AAClD,IAAA,IAAI,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAC7B,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAG9B,IAAA,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAC5B,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7B,IAAI,OAAO,GAAG,OAAO,EAAE;QACrB,MAAM,CAAC,CAAC,CAAC;AACP,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACpD,iBAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAChC,KAAA;AAAM,SAAA;QACL,MAAM,CAAC,CAAC,CAAC;AACP,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACpD,iBAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAChC,KAAA;;AAGD,IAAA,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;SACxC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,IAAI,OAAO,IAAI,OAAO,EAAE;QACtB,IAAI,OAAO,GAAG,OAAO,EAAE;YACrB,MAAM,CAAC,CAAC,CAAC;AACP,gBAAA,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;AAC3B,oBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxD,SAAA;AAAM,aAAA;YACL,MAAM,CAAC,CAAC,CAAC;AACP,gBAAA,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;AAC3B,oBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxD,SAAA;AACF,KAAA;IAED,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAEzD,IAAA,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,OAAe,EAAA;;AAC/C,IAAA,EAAA,GAAqB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAzC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,CAA0B;AAE3C,IAAA,IAAI,GAAG,GAAG,EAAE,EACV,KAAK,GAAG,CAAC,CAAC;AAEZ,IAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,QAAA,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACtB,YAAA,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YAChB,SAAS;AACV,SAAA;AACD,QAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAC/D,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,IAAI,GAAG,CAAC;QACxB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAC/B,KAAA;AAED,IAAA,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;AAC9C,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAA;AAC9B,IAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C;;ACrIM,SAAU,GAAG,CAAC,CAA2B,EAAA;IAC7C,IAAI,OAAO,CAAC,IAAI,QAAQ,IAAI,OAAO,CAAC,IAAI,QAAQ;AAAE,QAAA,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACnE,IAAA,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;AAAE,QAAA,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACvC,IAAA,OAAO,CAAC,CAAC;AACX;;ACJA,IAAY,aA4CX,CAAA;AA5CD,CAAA,UAAY,aAAa,EAAA;AACrB;;AAEG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AAEP;;AAEG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AAEJ;;AAEG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AAEL;;;AAGG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS,CAAA;AAET;;;AAGG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS,CAAA;AAET;;;AAGG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AAEP;;;AAGG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAW,CAAA;AAEX;;AAEG;AACH,IAAA,aAAA,CAAA,aAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAE,CAAA;AACN,CAAC,EA5CW,aAAa,KAAb,aAAa,GA4CxB,EAAA,CAAA,CAAA;;AC3CD;;;;;AAKG;SACa,QAAQ,CAAC,KAA+B,EAAE,CAAa,EAAE,IAA4B,EAAA;AAA3C,IAAA,IAAA,CAAA,KAAA,KAAA,CAAA,EAAA,EAAA,CAAa,GAAA,CAAA,CAAA,EAAA;AAAE,IAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAA,GAAK,aAAa,CAAC,SAAS,CAAA,EAAA;AACjG,IAAA,IAAI,IAAI,KAAK,aAAa,CAAC,WAAW,EAAE;AACpC,QAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;AAC7E,KAAA;AAED,IAAA,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ;AACxD,QAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAE7B,IAAI,GAAG,GAAG,KAAK,CAAC;AAChB,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAClB,GAAG,GAAG,IAAI,CAAC;AACX,QAAA,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC9B,KAAA;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EACxB,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAClB,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;;IAGvB,IAAI,CAAC,GAAG,CAAC,EAAE;QACP,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;AACnB,YAAA,OAAO,GAAG,CAAC;AACV,aAAA;AACD,YAAA,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,GAAG,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YACpE,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAClC,YAAA,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,SAAA;AACJ,KAAA;;IAID,IAAI,CAAC,IAAI,CAAC,EAAE;AACR,QAAQ,OAAO,CAAC,OAAO;AACvB,QAAA,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE;AAC/C,YAAA,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,SAAA;AACD,QAAA,OAAO,CAAC,GAAG,IAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,OAAO,CAAC;AACxD,KAAA;;AAID,IAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACX,QAAA,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,OAAO,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,KAAA;SAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,QAAA,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACvG,KAAA;AAED,IAAA,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAEhC,IAAA,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE;AACjD,QAAA,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAC7B,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACnG,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,CAAC,GAAG,KAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC;AAChG,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,GAAW,EAAE,GAAY,EAAE,IAAmB,EAAA;AACjF,IAAA,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACtD,QAAA,OAAO,KAAK,CAAC;;AAGjB,IAAA,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC;AACrE,SAAC,GAAG,IAAI,IAAI,KAAK,aAAa,CAAC,OAAO,CAAC;AACvC,QAAA,OAAO,KAAK,CAAC;AAEjB,IAAA,IAAI,IAAI,KAAK,aAAa,CAAC,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC;SACjE,CAAC,GAAG,IAAI,IAAI,KAAK,aAAa,CAAC,OAAO,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC;;;AAIhB,IAAA,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,IAAI,IAAI,GAAG,IAAI;AACX,QAAA,OAAO,IAAI,CAAC;SACX,IAAI,IAAI,GAAG,IAAI;AAChB,QAAA,OAAO,KAAK,CAAC;;AAGjB,IAAA,QAAQ,IAAI;AACR,QAAA,KAAK,aAAa,CAAC,SAAS,EAAE,OAAO,KAAK,CAAC;AAC3C,QAAA,KAAK,aAAa,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC;QACxC,KAAK,aAAa,CAAC,SAAS,CAAC;QAC7B,SAAS,QAAQ,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAC;AAC3D,KAAA;AACL,CAAC;AAED,SAAS,SAAS,CAAC,IAAI,EAAE,CAAa,EAAA;AAAb,IAAA,IAAA,CAAA,KAAA,KAAA,CAAA,EAAA,EAAA,CAAa,GAAA,CAAA,CAAA,EAAA;AAClC,IAAA,IAAI,CAAC,CAAC;QACF,CAAC,GAAG,CAAC,CAAC;AACV,IAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ;QACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;IAEpB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EACnB,CAAC,GAAG,EAAE,CAAC;IAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACzB,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,EAAE;YACT,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC,GAAG,CAAC,CAAC;AAChB,SAAA;AAAM,aAAA;YACH,CAAC,GAAG,CAAC,CAAC;AACT,SAAA;QACD,CAAC,IAAI,CAAC,CAAC;AACV,KAAA;AACD,IAAA,IAAI,CAAC;QACD,CAAC,IAAI,CAAC,CAAC;AAEX,IAAA,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1C;;ACxHA;AACoC;AAC9B,SAAU,iBAAiB,CAAC,MAAM,EAAA;IACvC,IAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AACrC,IAAA,IAAI,UAAU,EAAE;AACf,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1B,KAAA;AACD,IAAA,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;AACxB,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1B,KAAA;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE;AACxC,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,SAAA;AACD,KAAA;AACD,IAAA,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,IAAI,GAAG,EAAE;QAClC,MAAM,GAAG,GAAG,CAAC;AACb,KAAA;SAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE;AAC5C,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,KAAA;AACD,IAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;AACrB,QAAA,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;AACtB,KAAA;AACD,IAAA,IAAI,UAAU,EAAE;AACf,QAAA,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;AACtB,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AACf;;ACzBgB,SAAA,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAA;AACxC,IAAA,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC7B,IAAA,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;;IAG7B,IAAI,QAAQ,GAAG,CAAC,CAAC;AACjB,IAAA,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;AACtB,QAAA,QAAQ,EAAE,CAAC;AACX,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC5B,KAAA;AACD,IAAA,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;AACtB,QAAA,QAAQ,EAAE,CAAC;AACX,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC5B,KAAA;AACD,IAAA,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACrC,IAAA,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/B,QAAA,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3D,KAAA;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/B,QAAA,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3D,KAAA;AACD,IAAA,IAAI,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;AACpD,IAAA,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AACtD,IAAA,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAEtD,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;QACpC,IAAI,IAAI,GAAG,OAAO,CAAC;QACnB,OAAO,GAAG,OAAO,CAAC;QAClB,OAAO,GAAG,IAAI,CAAC;AACf,KAAA;IAED,IAAI,OAAO,IAAI,GAAG,EAAE;AACnB,QAAA,OAAO,GAAG,CAAC;AACX,KAAA;AAED;;AAEE;AACF,IAAA,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,cAAc,GAAG,EAAE,CAAC;AACxB,IAAA,IAAI,eAAe,GAAG,MAAM,GAAG,CAAC,CAAC;IAEjC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAChC,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACvC,KAAA;AACD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,QAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACrE,YAAA,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE;gBACjE,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,aAAA;AACD,SAAA;QACD,GAAG,IAAI,KAAK,CAAC;QACb,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;AAC7B,QAAA,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC;AAC3B,QAAA,eAAe,EAAE,CAAC;AAClB,KAAA;AACD;;AAEE;IACF,MAAM,GAAG,iBAAiB,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACjE,IAAI,QAAQ,IAAI,CAAC,EAAE;AAClB,QAAA,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;AACtB,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;AAEE;AACF,SAAS,aAAa,CAAC,MAAM,EAAE,OAAO,EAAA;IACrC,IAAI,OAAO,IAAI,CAAC;AACf,QAAA,OAAO,MAAM,CAAC;AACV,SAAA;AACJ,QAAA,MAAM,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC;QAC7G,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,CAAC,CAAA;AACxG,KAAA;AACF;;SCnFgB,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAc,EAAA;AAAd,IAAA,IAAA,UAAA,KAAA,KAAA,CAAA,EAAA,EAAA,UAAc,GAAA,CAAA,CAAA,EAAA;IACpD,IAAI,OAAO,IAAI,CAAC,EAAE;AACd,QAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACzC,KAAA;AAED,IAAA,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAC/B,IAAA,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;;AAG7B,IAAA,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC5E,IAAA,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE1E,IAAI,QAAQ,IAAI,CAAC;AACb,QAAA,OAAO,GAAG,CAAC;IAEf,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,IAAA,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;AACnB,QAAA,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,GAAG,EAAE,CAAC;AACT,KAAA;AACD,IAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;AACpB,QAAA,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjC,QAAA,GAAG,EAAE,CAAC;AACT,KAAA;AAED,IAAA,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAExF,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACzC,IAAI,OAAO,IAAI,CAAC,EAAE;AACd,QAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3F,QAAA,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE;YACf,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,SAAA;AAAM,aAAA;YACH,IAAI,OAAO,GAAG,OAAO,EAAE;gBACnB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACrC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5E,aAAA;iBAAM,IAAI,OAAO,GAAG,OAAO,EAAE;gBAC1B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;gBAC9C,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/E,aAAA;iBAAM,IAAI,OAAO,IAAI,OAAO,EAAE;AAC3B,gBAAA,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,aAAA;AACJ,SAAA;AACJ,KAAA;AAED,IAAA,IAAI,IAAI,GAAG,CAAC,CAAE,CAAA,EAAE,GAAG,OAAO,CAAC,MAAM,CAAA,CAAa,OAAO,GAAG,GAAG;IAC3D,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClI,IAAA,QAAQ,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAE5H,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;AACxB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC7B,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AAClB,YAAA,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,SAAA;QACD,IAAI,GAAG,KAAK,CAAC;AACb,QAAA,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAEjD,KAAA;AAED,IAAA,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC;IAE5B,OAAO,IAAI,IAAI,UAAU,EAAE;QACvB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;YACxC,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;AAChC,YAAA,EAAE,EAAE,CAAC;AACR,SAAA;QACD,OAAO,IAAI,EAAE,CAAC;QAEd,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,IAAI,CAAC,IAAI;gBACL,OAAO,IAAI,GAAG,CAAC;AACnB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AACrB,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;gBACpB,OAAO,IAAI,GAAG,CAAC;AACf,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;YACD,IAAI,GAAG,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,YAAA,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpC,SAAA;AACJ,KAAA;IAED,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E;;AC3FgB,SAAA,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAA;AACxC,IAAA,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC7B,IAAA,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC7B,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1B,IAAA,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAEK,SAAU,MAAM,CAAC,MAAe,EAAA;AACrC,IAAA,IAAG,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAC;AACnB,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1B,KAAA;AAAI,SAAA;AACJ,QAAA,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;AACtB,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AACf;;ACVgB,SAAA,OAAO,CAAC,QAAuB,EAAE,OAAqB,EAAA;IAClE,IAAI,OAAO,IAAI,CAAC,EAAE;AACd,QAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACzC,KAAA;AAED,IAAA,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAC/B,IAAA,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAE7B,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnB,QAAQ,CAAC,OAAO,CAAC,CAAC;IAElB,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,IAAA,IAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,EAAC;QAClB,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjC,KAAA;AACD,IAAA,IAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAC;AACjB,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAA;IAED,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChH,OAAO,IAAI,GAAC,MAAM,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe,EAAA;IAC7B,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;AAC5B,QAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC5D,KAAA;AACL;;AChCgB,SAAA,SAAS,CAAC,OAAgB,EAAE,OAAgB,EAAA;;IAC3D,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,IAAA,IAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAC;QACzC,OAAO,CAAC,CAAC,CAAC;AACV,KAAA;AAAK,SAAA,IAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAC;AAC/C,QAAA,OAAO,CAAC,CAAC;AACT,KAAA;AAAK,SAAA,IAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAC;AAC/C,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,QAAQ,GAAG,IAAI,CAAC;AAChB,KAAA;AACD,IAAA,EAAA,GAAqB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,EAAzC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,CAA0B;IAC3C,IAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC;AACtC,QAAA,OAAO,CAAC,CAAC;AACT,KAAA;AACD,IAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAG,CAAC,EAAE,EAAC;QACxC,IAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAC;YAC3B,SAAS;AACT,SAAA;aAAK,IAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAC;AAChC,YAAA,IAAG,QAAQ,EAAC;gBACX,OAAO,CAAC,CAAC,CAAC;AACV,aAAA;AAAI,iBAAA;AACJ,gBAAA,OAAO,CAAC,CAAC;AACT,aAAA;AACD,SAAA;AAAI,aAAA;AACJ,YAAA,IAAG,QAAQ,EAAC;AACX,gBAAA,OAAO,CAAC,CAAC;AACT,aAAA;AAAI,iBAAA;gBACJ,OAAO,CAAC,CAAC,CAAC;AACV,aAAA;AACD,SAAA;AACD,KAAA;AACD,IAAA,OAAO,CAAC,CAAC;AACV;;ACxBA,IAAA,UAAA,kBAAA,YAAA;AAkDE,IAAA,SAAA,UAAA,CAAY,MAAsC,EAAA;AAAtC,QAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAAsC,GAAA,GAAA,CAAA,EAAA;QAChD,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC1C;IAhDc,UAAQ,CAAA,QAAA,GAAvB,UAAwB,MAAM,EAAA;AAC5B,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,MAAM,CAAC;AAAE,gBAAA,MAAM,KAAK,CAAC,6BAA6B,GAAG,MAAM,CAAC,CAAC;AAEvE,YAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG;AAAE,gBAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpD,SAAA;;YAAM,MAAM,GAAG,GAAG,CAAC;;AAGpB,QAAA,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,YAAA,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;AAC7C,aAAA,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;AAGnE,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACjB,YAAA,IAAA,EAAsB,GAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAzC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,QAAwB,CAAC;AAC/C,YAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAExB,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;gBACrB,IAAI,GAAG,GAAG,CAAC;AACX,gBAAA,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChC,aAAA;YAED,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC7B,gBAAA,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACrD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACpC,aAAA;AAAM,iBAAA;gBACL,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;AAChD,aAAA;AAED,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,QAAQ,EAAE;gBAC7B,MAAM;AACJ,oBAAA,IAAI,GAAG,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,aAAA;iBAAM,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE;gBACrD,MAAM;oBACJ,IAAI;wBACJ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;yBACnC,OAAO,CAAC,MAAM,GAAG,QAAQ,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;AACxE,aAAA;AAAM,iBAAA;gBACL,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AACrE,aAAA;AACF,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf,CAAA;AAMD,IAAA,UAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,YAAA;QACE,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB,CAAA;IAED,UAAQ,CAAA,SAAA,CAAA,QAAA,GAAR,UAAS,GAA6B,EAAA;QACpC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACvC,CAAA;AAEM,IAAA,UAAA,CAAA,cAAc,GAArB,UAAsB,MAAM,EAAE,MAAU,EAAE,SAAe,EAAA;AAA3B,QAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAAU,GAAA,CAAA,CAAA,EAAA;AAAE,QAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAe,GAAA,GAAA,CAAA,EAAA;;;;;;;AAOvD,QAAA,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AAClC,QAAA,IAAI,GAAG;AAAE,YAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAI;YACzB,IAAI,CAAC,GAAG,MAAM,EAAE;gBACd,MAAM,GAAG,CAAC,CAAC;gBACX,CAAC,GAAG,CAAC,CAAC;AACP,aAAA;;gBAAM,CAAC,IAAI,MAAM,CAAC;YAEnB,IAAI;gBACF,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;AAC/B,qBAAC,CAAC,GAAG,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC;AAC7C,oBAAA,IAAI,CAAC;AACR,SAAA;QACD,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KACxD,CAAA;AACD,IAAA,UAAA,CAAA,SAAA,CAAA,cAAc,GAAd,UAAe,MAAU,EAAE,SAAe,EAAA;AAA3B,QAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAAU,GAAA,CAAA,CAAA,EAAA;AAAE,QAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAe,GAAA,GAAA,CAAA,EAAA;AACxC,QAAA,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;KACjE,CAAA;AAEM,IAAA,UAAA,CAAA,KAAK,GAAZ,UAAa,MAAM,EAAE,SAAa,EAAE,IAAsB,EAAA;AAArC,QAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAa,GAAA,CAAA,CAAA,EAAA;AAAE,QAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAA,GAAOA,aAAK,CAAC,SAAS,CAAA,EAAA;AACxD,QAAA,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;QAErC,IAAI,KAAK,CAAC,SAAS,CAAC;AAClB,YAAA,MAAM,KAAK,CAAC,6BAA6B,GAAG,SAAS,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;KAC1C,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,KAAK,GAAL,UAAM,SAAa,EAAE,IAAsB,EAAA;AAArC,QAAA,IAAA,SAAA,KAAA,KAAA,CAAA,EAAA,EAAA,SAAa,GAAA,CAAA,CAAA,EAAA;AAAE,QAAA,IAAA,IAAA,KAAA,KAAA,CAAA,EAAA,EAAA,IAAA,GAAOA,aAAK,CAAC,SAAS,CAAA,EAAA;QACzC,IAAI,KAAK,CAAC,SAAS,CAAC;AAClB,YAAA,MAAM,KAAK,CAAC,6BAA6B,GAAG,SAAS,CAAC,CAAC;AAEzD,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;KAC9D,CAAA;IAEM,UAAG,CAAA,GAAA,GAAV,UAAW,MAAM,EAAA;AACf,QAAA,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;KACpB,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,GAAG,GAAH,YAAA;QACE,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACxC,CAAA;IAEM,UAAK,CAAA,KAAA,GAAZ,UAAa,MAAM,EAAA;AACjB,QAAA,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,MAAM,CAAC;AAC9C,QAAA,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;KACzD,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,KAAK,GAAL,YAAA;QACE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtE,QAAA,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;KACjE,CAAA;IAEM,UAAI,CAAA,IAAA,GAAX,UAAY,MAAM,EAAA;AAChB,QAAA,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,MAAM,CAAC;AAC9C,QAAA,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;KAC3D,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,IAAI,GAAJ,YAAA;QACE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtE,QAAA,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;KACnE,CAAA;AAEM,IAAA,UAAA,CAAA,GAAG,GAAV,UAAW,OAAO,EAAE,OAAO,EAAA;AACzB,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KAC9B,CAAA;IAED,UAAG,CAAA,SAAA,CAAA,GAAA,GAAH,UAAI,MAAkB,EAAA;AACpB,QAAA,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;KAC3D,CAAA;AAEM,IAAA,UAAA,CAAA,QAAQ,GAAf,UAAgB,OAAO,EAAE,OAAO,EAAA;AAC9B,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACnC,CAAA;IAED,UAAQ,CAAA,SAAA,CAAA,QAAA,GAAR,UAAS,MAAkB,EAAA;AACzB,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;KAChE,CAAA;AAEM,IAAA,UAAA,CAAA,QAAQ,GAAf,UAAgB,OAAO,EAAE,OAAO,EAAA;AAC9B,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACnC,CAAA;IAED,UAAQ,CAAA,SAAA,CAAA,QAAA,GAAR,UAAS,MAAkB,EAAA;AACzB,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;KAChE,CAAA;AAEM,IAAA,UAAA,CAAA,MAAM,GAAb,UAAc,OAAO,EAAE,OAAO,EAAE,SAAkB,EAAA;AAChD,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;KAC5C,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,MAAM,GAAN,UAAO,MAAkB,EAAE,SAAkB,EAAA;AAC3C,QAAA,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;KACzE,CAAA;AAEM,IAAA,UAAA,CAAA,OAAO,GAAd,UAAe,OAAO,EAAE,OAAO,EAAA;AAC7B,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KAClC,CAAA;IAED,UAAO,CAAA,SAAA,CAAA,OAAA,GAAP,UAAQ,MAAkB,EAAA;AACxB,QAAA,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;KAC/D,CAAA;AAEM,IAAA,UAAA,CAAA,SAAS,GAAhB,UAAiB,OAAO,EAAE,OAAO,EAAA;AAC/B,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,QAAA,OAAO,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACpC,CAAA;IAED,UAAS,CAAA,SAAA,CAAA,SAAA,GAAT,UAAU,MAAkB,EAAA;QAC1B,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;KACjD,CAAA;IAEM,UAAM,CAAA,MAAA,GAAb,UAAc,MAAM,EAAA;AAClB,QAAA,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;KACvB,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;QACE,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3C,CAAA;IAEM,UAAiB,CAAA,iBAAA,GAAxB,UAAyB,MAAM,EAAA;AAC7B,QAAA,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,QAAA,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;KAClC,CAAA;AAED,IAAA,UAAA,CAAA,SAAA,CAAA,iBAAiB,GAAjB,YAAA;QACE,OAAO,IAAI,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACtD,CAAA;IApNM,UAAa,CAAA,aAAA,GAAGA,aAAK,CAAC;IAqN/B,OAAC,UAAA,CAAA;AAAA,CAvND,EAuNC;;;;"} \ No newline at end of file +{"version":3,"file":"big-decimal.js","sources":["../../../src/add.ts","../../../src/abs.ts","../../../src/roundingModes.ts","../../../src/round.ts","../../../src/stripTrailingZero.ts","../../../src/multiply.ts","../../../src/divide.ts","../../../src/subtract.ts","../../../src/modulus.ts","../../../src/compareTo.ts","../../../src/big-decimal.ts"],"sourcesContent":["//function add {\r\nexport function add(number1: string, number2 = \"0\") {\r\n let neg = 0,\r\n ind = -1,\r\n neg_len;\r\n\r\n //check for negatives\r\n if (number1[0] == \"-\") {\r\n number1 = number1.substring(1);\r\n if (!testZero(number1)) {\r\n neg++;\r\n ind = 1;\r\n neg_len = number1.length;\r\n }\r\n }\r\n if (number2[0] == \"-\") {\r\n number2 = number2.substring(1);\r\n if (!testZero(number2)) {\r\n neg++;\r\n ind = 2;\r\n neg_len = number2.length;\r\n }\r\n }\r\n\r\n number1 = trim(number1);\r\n number2 = trim(number2);\r\n\r\n [number1, number2] = pad(trim(number1), trim(number2));\r\n\r\n if (neg == 1) {\r\n if (ind === 1) number1 = compliment(number1);\r\n else if (ind === 2) number2 = compliment(number2);\r\n }\r\n\r\n let res = addCore(number1, number2);\r\n if (!neg) return trim(res);\r\n else if (neg == 2) return \"-\" + trim(res);\r\n else {\r\n if (number1.length < res.length) return trim(res.substring(1));\r\n else return \"-\" + trim(compliment(res));\r\n }\r\n}\r\n\r\nfunction compliment(number: string) {\r\n if (testZero(number)) {\r\n return number;\r\n }\r\n\r\n let s = \"\",\r\n l = number.length,\r\n dec = number.split(\".\")[1],\r\n ld = dec ? dec.length : 0;\r\n\r\n for (let i = 0; i < l; i++) {\r\n if (number[i] >= \"0\" && number[i] <= \"9\") s += 9 - parseInt(number[i]);\r\n else s += number[i];\r\n }\r\n\r\n let one = ld > 0 ? \"0.\" + new Array(ld).join(\"0\") + \"1\" : \"1\";\r\n\r\n return addCore(s, one);\r\n}\r\n\r\nexport function trim(number: string) {\r\n let parts = number.split(\".\");\r\n\r\n if (!parts[0]) parts[0] = \"0\";\r\n\r\n while (parts[0][0] == \"0\" && parts[0].length > 1)\r\n parts[0] = parts[0].substring(1);\r\n\r\n return parts[0] + (parts[1] ? \".\" + parts[1] : \"\");\r\n}\r\n\r\nexport function pad(number1: string, number2: string) {\r\n let parts1 = number1.split(\".\"),\r\n parts2 = number2.split(\".\");\r\n\r\n //pad integral part\r\n let length1 = parts1[0].length,\r\n length2 = parts2[0].length;\r\n if (length1 > length2) {\r\n parts2[0] =\r\n new Array(Math.abs(length1 - length2) + 1).join(\"0\") +\r\n (parts2[0] ? parts2[0] : \"\");\r\n } else {\r\n parts1[0] =\r\n new Array(Math.abs(length1 - length2) + 1).join(\"0\") +\r\n (parts1[0] ? parts1[0] : \"\");\r\n }\r\n\r\n //pad fractional part\r\n (length1 = parts1[1] ? parts1[1].length : 0),\r\n (length2 = parts2[1] ? parts2[1].length : 0);\r\n if (length1 || length2) {\r\n if (length1 > length2) {\r\n parts2[1] =\r\n (parts2[1] ? parts2[1] : \"\") +\r\n new Array(Math.abs(length1 - length2) + 1).join(\"0\");\r\n } else {\r\n parts1[1] =\r\n (parts1[1] ? parts1[1] : \"\") +\r\n new Array(Math.abs(length1 - length2) + 1).join(\"0\");\r\n }\r\n }\r\n\r\n number1 = parts1[0] + (parts1[1] ? \".\" + parts1[1] : \"\");\r\n number2 = parts2[0] + (parts2[1] ? \".\" + parts2[1] : \"\");\r\n\r\n return [number1, number2];\r\n}\r\n\r\nfunction addCore(number1: string, number2: string) {\r\n [number1, number2] = pad(number1, number2);\r\n\r\n let sum = \"\",\r\n carry = 0;\r\n\r\n for (let i = number1.length - 1; i >= 0; i--) {\r\n if (number1[i] === \".\") {\r\n sum = \".\" + sum;\r\n continue;\r\n }\r\n let temp = parseInt(number1[i]) + parseInt(number2[i]) + carry;\r\n sum = (temp % 10) + sum;\r\n carry = Math.floor(temp / 10);\r\n }\r\n\r\n return carry ? carry.toString() + sum : sum;\r\n}\r\n\r\nfunction testZero(number: string) {\r\n return /^0[0]*[.]{0,1}[0]*$/.test(number);\r\n}\r\n","export function abs(n: number | string | bigint) {\r\n if (typeof n == \"number\" || typeof n == \"bigint\") n = n.toString();\r\n if (n[0] == \"-\") return n.substring(1);\r\n return n;\r\n}\r\n","export enum RoundingModes {\r\n /**\r\n * Rounding mode to round towards positive infinity.\r\n */\r\n CEILING,\r\n\r\n /**\r\n * Rounding mode to round towards zero.\r\n */\r\n DOWN,\r\n\r\n /**\r\n * Rounding mode to round towards negative infinity.\r\n */\r\n FLOOR,\r\n\r\n /**\r\n * Rounding mode to round towards \"nearest neighbor\" unless both neighbors are equidistant, \r\n * in which case round down.\r\n */\r\n HALF_DOWN,\r\n\r\n /**\r\n * Rounding mode to round towards the \"nearest neighbor\" unless both neighbors are equidistant, \r\n * in which case, round towards the even neighbor.\r\n */\r\n HALF_EVEN,\r\n\r\n /**\r\n * Rounding mode to round towards \"nearest neighbor\" unless both neighbors are equidistant, \r\n * in which case round up.\r\n */\r\n HALF_UP,\r\n\r\n /**\r\n * Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary.\r\n * UNIMPLEMENTED\r\n */\r\n UNNECESSARY,\r\n\r\n /**\r\n * Rounding mode to round away from zero.\r\n */\r\n UP\r\n}\r\n\r\n","import { RoundingModes } from './roundingModes';\r\n/**\r\n * \r\n * @param input the number to round\r\n * @param n precision\r\n * @param mode Rounding Mode\r\n */\r\nexport function roundOff(input: number | string | bigint, n: number = 0, mode=RoundingModes.HALF_EVEN) {\r\n if (mode === RoundingModes.UNNECESSARY) {\r\n throw new Error(\"UNNECESSARY Rounding Mode has not yet been implemented\");\r\n }\r\n\r\n if (typeof (input) == 'number' || typeof (input) == 'bigint')\r\n input = input.toString();\r\n\r\n let neg = false;\r\n if (input[0] === '-') {\r\n neg = true;\r\n input = input.substring(1);\r\n }\r\n\r\n let parts = input.split('.'),\r\n partInt = parts[0],\r\n partDec = parts[1];\r\n\r\n //handle case of -ve n: roundOff(12564,-2)=12600\r\n if (n < 0) {\r\n n = -n;\r\n if (partInt.length <= n)\r\n return '0';\r\n else {\r\n let prefix = partInt.substr(0, partInt.length - n);\r\n input = prefix + '.' + partInt.substr(partInt.length - n) + partDec;\r\n prefix = roundOff(input, 0, mode);\r\n return (neg ? '-' : '') + prefix + (new Array(n + 1).join('0'));\r\n }\r\n }\r\n\r\n\r\n // handle case when integer output is desired\r\n if (n == 0) {\r\n let l = partInt.length;\r\n if (greaterThanFive(parts[1], partInt, neg, mode)) {\r\n partInt = increment(partInt);\r\n }\r\n return (neg&&parseInt(partInt) ? '-' : '') + partInt;\r\n }\r\n\r\n\r\n // handle case when n>0\r\n if (!parts[1]) {\r\n return (neg ? '-' : '') + partInt + '.' + (new Array(n + 1).join('0'));\r\n } else if (parts[1].length < n) {\r\n return (neg ? '-' : '') + partInt + '.' + parts[1] + (new Array(n - parts[1].length + 1).join('0'));\r\n }\r\n\r\n partDec = parts[1].substring(0, n);\r\n let rem = parts[1].substring(n);\r\n\r\n if (rem && greaterThanFive(rem, partDec, neg, mode)) {\r\n partDec = increment(partDec);\r\n if (partDec.length > n) {\r\n return (neg ? '-' : '') + increment(partInt, parseInt(partDec[0])) + '.' + partDec.substring(1);\r\n }\r\n }\r\n return (neg&&(parseInt(partInt) || parseInt(partDec)) ? '-' : '') + partInt + '.' + partDec;\r\n}\r\n\r\nfunction greaterThanFive(part: string, pre: string, neg: boolean, mode: RoundingModes) {\r\n if (!part || part === new Array(part.length + 1).join('0'))\r\n return false;\r\n\r\n // #region UP, DOWN, CEILING, FLOOR \r\n if (mode === RoundingModes.DOWN || (!neg && mode === RoundingModes.FLOOR) ||\r\n (neg && mode === RoundingModes.CEILING))\r\n return false;\r\n\r\n if (mode === RoundingModes.UP || (neg && mode === RoundingModes.FLOOR) ||\r\n (!neg && mode === RoundingModes.CEILING))\r\n return true;\r\n // #endregion\r\n\r\n // case when part !== five\r\n let five = '5' + (new Array(part.length).join('0'));\r\n if (part > five)\r\n return true;\r\n else if (part < five)\r\n return false;\r\n\r\n // case when part === five\r\n switch (mode) {\r\n case RoundingModes.HALF_DOWN: return false;\r\n case RoundingModes.HALF_UP: return true;\r\n case RoundingModes.HALF_EVEN:\r\n default: return (parseInt(pre[pre.length - 1]) % 2 == 1)\r\n }\r\n}\r\n\r\nfunction increment(part, c: number = 0) {\r\n if (!c)\r\n c = 1;\r\n if (typeof (part) == 'number')\r\n part.toString();\r\n\r\n let l = part.length - 1,\r\n s = '';\r\n\r\n for (let i = l; i >= 0; i--) {\r\n let x = parseInt(part[i]) + c;\r\n if (x == 10) {\r\n c = 1; x = 0;\r\n } else {\r\n c = 0;\r\n }\r\n s += x;\r\n }\r\n if (c)\r\n s += c;\r\n\r\n return s.split('').reverse().join('');\r\n}","/*\r\n* Removes zero from front and back*/\r\nexport function stripTrailingZero(number) {\r\n\tconst isNegative = number[0] === '-';\r\n\tif (isNegative) {\r\n\t\tnumber = number.substr(1);\r\n\t}\r\n\twhile (number[0] == '0') {\r\n\t\tnumber = number.substr(1);\r\n\t}\r\n\tif (number.indexOf('.') != -1) {\r\n\t\twhile (number[number.length - 1] == '0') {\r\n\t\t\tnumber = number.substr(0, number.length - 1);\r\n\t\t}\r\n\t}\r\n\tif (number == \"\" || number == \".\") {\r\n\t\tnumber = '0';\r\n\t} else if (number[number.length - 1] == '.') {\r\n\t\tnumber = number.substr(0, number.length - 1);\r\n\t}\r\n\tif (number[0] == '.') {\r\n\t\tnumber = '0' + number;\r\n\t}\r\n\tif (isNegative && number != '0') {\r\n\t\tnumber = '-' + number;\r\n\t}\r\n\treturn number;\r\n}","import { stripTrailingZero } from \"./stripTrailingZero\"\r\n\r\nexport function multiply(number1, number2) {\r\n\tnumber1 = number1.toString();\r\n\tnumber2 = number2.toString();\r\n\r\n\t/*Filter numbers*/\r\n\tlet negative = 0;\r\n\tif (number1[0] == '-') {\r\n\t\tnegative++;\r\n\t\tnumber1 = number1.substr(1);\r\n\t}\r\n\tif (number2[0] == '-') {\r\n\t\tnegative++;\r\n\t\tnumber2 = number2.substr(1);\r\n\t}\r\n\tnumber1 = stripTrailingZero(number1);\r\n\tnumber2 = stripTrailingZero(number2);\r\n\tlet decimalLength1 = 0;\r\n\tlet decimalLength2 = 0;\r\n\r\n\tif (number1.indexOf('.') != -1) {\r\n\t\tdecimalLength1 = number1.length - number1.indexOf('.') - 1;\r\n\t}\r\n\r\n\tif (number2.indexOf('.') != -1) {\r\n\t\tdecimalLength2 = number2.length - number2.indexOf('.') - 1;\r\n\t}\r\n\tlet decimalLength = decimalLength1 + decimalLength2;\r\n\tnumber1 = stripTrailingZero(number1.replace('.', ''));\r\n\tnumber2 = stripTrailingZero(number2.replace('.', ''));\r\n\r\n\tif (number1.length < number2.length) {\r\n\t\tlet temp = number1;\r\n\t\tnumber1 = number2;\r\n\t\tnumber2 = temp;\r\n\t}\r\n\r\n\tif (number2 == '0') {\r\n\t\treturn '0';\r\n\t}\r\n\r\n\t/*\r\n\t* Core multiplication\r\n\t*/\r\n\tlet length = number2.length;\r\n\tlet carry = 0;\r\n\tlet positionVector = [];\r\n\tlet currentPosition = length - 1;\r\n\r\n\tlet result = \"\";\r\n\tfor (let i = 0; i < length; i++) {\r\n\t\tpositionVector[i] = number1.length - 1;\r\n\t}\r\n\tfor (let i = 0; i < 2 * number1.length; i++) {\r\n\t\tlet sum = 0;\r\n\t\tfor (let j = number2.length - 1; j >= currentPosition && j >= 0; j--) {\r\n\t\t\tif (positionVector[j] > -1 && positionVector[j] < number1.length) {\r\n\t\t\t\tsum += parseInt(number1[positionVector[j]--]) * parseInt(number2[j]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tsum += carry;\r\n\t\tcarry = Math.floor(sum / 10);\r\n\t\tresult = sum % 10 + result;\r\n\t\tcurrentPosition--;\r\n\t}\r\n\t/*\r\n\t* Formatting result\r\n\t*/\r\n\tresult = stripTrailingZero(adjustDecimal(result, decimalLength));\r\n\tif (negative == 1) {\r\n\t\tresult = '-' + result;\r\n\t}\r\n\treturn result;\r\n}\r\n\r\n/*\r\n* Add decimal point\r\n*/\r\nfunction adjustDecimal(number, decimal) {\r\n\tif (decimal == 0)\r\n\t\treturn number;\r\n\telse {\r\n\t\tnumber = (decimal >= number.length) ? ((new Array(decimal - number.length + 1)).join('0') + number) : number;\r\n\t\treturn number.substr(0, number.length - decimal) + '.' + number.substr(number.length - decimal, decimal)\r\n\t}\r\n}\r\n","import { add, trim } from './add';\r\nimport { roundOff } from './round';\r\n\r\nexport function divide(dividend, divisor, precission = 8) {\r\n if (divisor == 0) {\r\n throw new Error('Cannot divide by 0');\r\n }\r\n\r\n dividend = dividend.toString();\r\n divisor = divisor.toString();\r\n\r\n // remove trailing zeros in decimal ISSUE#18\r\n dividend = dividend.replace(/(\\.\\d*?[1-9])0+$/g, \"$1\").replace(/\\.0+$/, \"\");\r\n divisor = divisor.replace(/(\\.\\d*?[1-9])0+$/g, \"$1\").replace(/\\.0+$/, \"\");\r\n\r\n if (dividend == 0)\r\n return '0';\r\n\r\n let neg = 0;\r\n if (divisor[0] == '-') {\r\n divisor = divisor.substring(1);\r\n neg++;\r\n }\r\n if (dividend[0] == '-') {\r\n dividend = dividend.substring(1);\r\n neg++;\r\n }\r\n\r\n var pt_dvsr = divisor.indexOf('.') > 0 ? divisor.length - divisor.indexOf('.') - 1 : -1;\r\n\r\n divisor = trim(divisor.replace('.', ''));\r\n if (pt_dvsr >= 0) {\r\n let pt_dvnd = dividend.indexOf('.') > 0 ? dividend.length - dividend.indexOf('.') - 1 : -1;\r\n\r\n if (pt_dvnd == -1) {\r\n dividend = trim(dividend + (new Array(pt_dvsr + 1)).join('0'));\r\n } else {\r\n if (pt_dvsr > pt_dvnd) {\r\n dividend = dividend.replace('.', '');\r\n dividend = trim(dividend + (new Array(pt_dvsr - pt_dvnd + 1)).join('0'));\r\n } else if (pt_dvsr < pt_dvnd) {\r\n dividend = dividend.replace('.', '');\r\n let loc = dividend.length - pt_dvnd + pt_dvsr;\r\n dividend = trim(dividend.substring(0, loc) + '.' + dividend.substring(loc));\r\n } else if (pt_dvsr == pt_dvnd) {\r\n dividend = trim(dividend.replace('.', ''));\r\n }\r\n }\r\n }\r\n\r\n let prec = 0, dl = divisor.length, rem = '0', quotent = '';\r\n let dvnd = (dividend.indexOf('.') > -1 && dividend.indexOf('.') < dl) ? dividend.substring(0, dl + 1) : dividend.substring(0, dl);\r\n dividend = (dividend.indexOf('.') > -1 && dividend.indexOf('.') < dl) ? dividend.substring(dl + 1) : dividend.substring(dl);\r\n \r\n if (dvnd.indexOf('.') > -1) {\r\n let shift = dvnd.length - dvnd.indexOf('.') - 1;\r\n dvnd = dvnd.replace('.', '');\r\n if (dl > dvnd.length) {\r\n shift += dl - dvnd.length;\r\n dvnd = dvnd + (new Array(dl - dvnd.length + 1)).join('0');\r\n }\r\n prec = shift;\r\n quotent = '0.' + (new Array(shift)).join('0');\r\n\r\n }\r\n\r\n precission = precission + 2;\r\n\r\n while (prec <= precission) {\r\n let qt = 0;\r\n while (parseInt(dvnd) >= parseInt(divisor)) {\r\n dvnd = add(dvnd, '-' + divisor);\r\n qt++;\r\n }\r\n quotent += qt;\r\n\r\n if (!dividend) {\r\n if (!prec)\r\n quotent += '.';\r\n prec++;\r\n dvnd = dvnd + '0';\r\n } else {\r\n if (dividend[0] == '.') {\r\n quotent += '.';\r\n prec++;\r\n dividend = dividend.substring(1);\r\n }\r\n dvnd = dvnd + dividend.substring(0, 1);\r\n dividend = dividend.substring(1);\r\n }\r\n }\r\n\r\n return ((neg == 1) ? '-' : '') + trim(roundOff(quotent, precission - 2));\r\n}","import { add } from './add';\r\n\r\nexport function subtract(number1, number2) {\r\n\tnumber1 = number1.toString();\r\n\tnumber2 = number2.toString();\r\n\tnumber2 = negate(number2);\r\n\treturn add(number1, number2);\r\n}\r\n\r\nexport function negate(number : string){\r\n\tif(number[0] == '-'){\r\n\t\tnumber = number.substr(1);\r\n\t}else{\r\n\t\tnumber = '-' + number;\r\n\t}\r\n\treturn number;\r\n}","import { divide } from './divide';\r\nimport { roundOff } from './round';\r\nimport { multiply } from './multiply';\r\nimport { subtract } from './subtract';\r\nimport { RoundingModes } from './roundingModes';\r\n\r\nexport function modulus(dividend: number|string, divisor:number|string) {\r\n if (divisor == 0) {\r\n throw new Error('Cannot divide by 0');\r\n }\r\n\r\n dividend = dividend.toString();\r\n divisor = divisor.toString();\r\n\r\n validate(dividend);\r\n validate(divisor);\r\n\r\n let sign = '';\r\n if(dividend[0] == '-'){\r\n sign = '-';\r\n dividend = dividend.substr(1);\r\n }\r\n if(divisor[0] == '-'){\r\n divisor = divisor.substr(1);\r\n }\r\n\r\n let result = subtract(dividend, multiply(divisor, roundOff(divide(dividend, divisor), 0, RoundingModes.FLOOR)));\r\n return sign+result;\r\n}\r\n\r\nfunction validate(oparand: string) {\r\n if (oparand.indexOf('.') != -1) {\r\n throw new Error('Modulus of non-integers not supported');\r\n }\r\n}\r\n","import { pad } from './add';\r\nimport {stripTrailingZero} from './stripTrailingZero';\r\n\r\nexport function compareTo(number1 : string, number2 : string) {\r\n\tlet negative = false;\r\n\t[number1, number2] = [number1, number2].map(n => stripTrailingZero(n));\r\n\tif(number1[0] == '-' && number2[0] != \"-\"){\r\n\t\treturn -1;\r\n\t}else if(number1[0] != '-' && number2[0] == '-'){\r\n\t\treturn 1;\r\n\t}else if(number1[0] == '-' && number2[0] == '-'){\r\n\t\tnumber1 = number1.substr(1);\r\n\t\tnumber2 = number2.substr(1);\r\n\t\tnegative = true;\r\n\t}\r\n\t[number1, number2] = pad(number1, number2);\r\n\tif(number1.localeCompare(number2) == 0){\r\n\t\treturn 0;\r\n\t}\r\n\tfor(let i = 0 ; i < number1.length ; i++){\r\n\t\tif(number1[i] == number2[i]){\r\n\t\t\tcontinue;\r\n\t\t}else if(number1[i] > number2[i]){\r\n\t\t\tif(negative){\r\n\t\t\t\treturn -1;\r\n\t\t\t}else{\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(negative){\r\n\t\t\t\treturn 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn 0;\r\n}\r\n\r\nfunction checkZero(number){\r\n\r\n}","import { add, trim } from \"./add\";\r\nimport { abs } from \"./abs\";\r\nimport { roundOff } from \"./round\";\r\nimport { multiply } from \"./multiply\";\r\nimport { divide } from \"./divide\";\r\nimport { modulus } from \"./modulus\";\r\nimport { compareTo } from \"./compareTo\";\r\nimport { subtract, negate } from \"./subtract\";\r\nimport { RoundingModes as Modes, RoundingModes } from \"./roundingModes\";\r\nimport { stripTrailingZero } from \"./stripTrailingZero\";\r\n\r\nclass bigDecimal {\r\n private value: string;\r\n static RoundingModes = Modes;\r\n\r\n private static validate(number): string {\r\n if (number) {\r\n number = number.toString();\r\n if (isNaN(number)) throw Error(\"Parameter is not a number: \" + number);\r\n\r\n if (number[0] == \"+\") number = number.substring(1);\r\n } else number = \"0\";\r\n\r\n //handle missing leading zero\r\n if (number.startsWith(\".\")) number = \"0\" + number;\r\n else if (number.startsWith(\"-.\")) number = \"-0\" + number.substr(1);\r\n\r\n //handle exponentiation\r\n if (/e/i.test(number)) {\r\n let [mantisa, exponent] = number.split(/[eE]/);\r\n mantisa = trim(mantisa);\r\n\r\n let sign = \"\";\r\n if (mantisa[0] == \"-\") {\r\n sign = \"-\";\r\n mantisa = mantisa.substring(1);\r\n }\r\n\r\n if (mantisa.indexOf(\".\") >= 0) {\r\n exponent = parseInt(exponent) + mantisa.indexOf(\".\");\r\n mantisa = mantisa.replace(\".\", \"\");\r\n } else {\r\n exponent = parseInt(exponent) + mantisa.length;\r\n }\r\n\r\n if (mantisa.length < exponent) {\r\n number =\r\n sign + mantisa + new Array(exponent - mantisa.length + 1).join(\"0\");\r\n } else if (mantisa.length >= exponent && exponent > 0) {\r\n number =\r\n sign +\r\n trim(mantisa.substring(0, exponent)) +\r\n (mantisa.length > exponent ? \".\" + mantisa.substring(exponent) : \"\");\r\n } else {\r\n number = sign + \"0.\" + new Array(-exponent + 1).join(\"0\") + mantisa;\r\n }\r\n }\r\n\r\n return number;\r\n }\r\n\r\n constructor(number: number | string | bigint = \"0\") {\r\n this.value = bigDecimal.validate(number);\r\n }\r\n\r\n getValue() {\r\n return this.value;\r\n }\r\n\r\n setValue(num: number | string | bigint) {\r\n this.value = bigDecimal.validate(num);\r\n }\r\n\r\n static getPrettyValue(number, digits = 3, separator = \",\"): string {\r\n // if (!(digits || separator)) {\r\n // digits = 3;\r\n // separator = ',';\r\n // } else if (!(digits && separator)) {\r\n // throw Error('Illegal Arguments. Should pass both digits and separator or pass none');\r\n // }\r\n number = bigDecimal.validate(number);\r\n let neg = number.charAt(0) == \"-\";\r\n if (neg) number = number.substring(1);\r\n var len = number.indexOf(\".\");\r\n len = len > 0 ? len : number.length;\r\n var temp = \"\";\r\n for (var i = len; i > 0; ) {\r\n if (i < digits) {\r\n digits = i;\r\n i = 0;\r\n } else i -= digits;\r\n\r\n temp =\r\n number.substring(i, i + digits) +\r\n (i < len - digits && i >= 0 ? separator : \"\") +\r\n temp;\r\n }\r\n return (neg ? \"-\" : \"\") + temp + number.substring(len);\r\n }\r\n getPrettyValue(digits = 3, separator = \",\") {\r\n return bigDecimal.getPrettyValue(this.value, digits, separator);\r\n }\r\n\r\n static round(number, precision = 0, mode = Modes.HALF_EVEN) {\r\n number = bigDecimal.validate(number);\r\n // console.log(number)\r\n if (isNaN(precision))\r\n throw Error(\"Precision is not a number: \" + precision);\r\n return roundOff(number, precision, mode);\r\n }\r\n\r\n round(precision = 0, mode = Modes.HALF_EVEN) {\r\n if (isNaN(precision))\r\n throw Error(\"Precision is not a number: \" + precision);\r\n\r\n return new bigDecimal(roundOff(this.value, precision, mode));\r\n }\r\n\r\n static abs(number) {\r\n number = bigDecimal.validate(number);\r\n return abs(number);\r\n }\r\n\r\n abs() {\r\n return new bigDecimal(abs(this.value));\r\n }\r\n\r\n static floor(number) {\r\n number = bigDecimal.validate(number);\r\n if (number.indexOf(\".\") === -1) return number;\r\n return bigDecimal.round(number, 0, RoundingModes.FLOOR);\r\n }\r\n\r\n floor() {\r\n if (this.value.indexOf(\".\") === -1) return new bigDecimal(this.value);\r\n return new bigDecimal(this.value).round(0, RoundingModes.FLOOR);\r\n }\r\n\r\n static ceil(number) {\r\n number = bigDecimal.validate(number);\r\n if (number.indexOf(\".\") === -1) return number;\r\n return bigDecimal.round(number, 0, RoundingModes.CEILING);\r\n }\r\n\r\n ceil() {\r\n if (this.value.indexOf(\".\") === -1) return new bigDecimal(this.value);\r\n return new bigDecimal(this.value).round(0, RoundingModes.CEILING);\r\n }\r\n\r\n static add(number1, number2) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return add(number1, number2);\r\n }\r\n\r\n add(number: bigDecimal) {\r\n return new bigDecimal(add(this.value, number.getValue()));\r\n }\r\n\r\n static subtract(number1, number2) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return subtract(number1, number2);\r\n }\r\n\r\n subtract(number: bigDecimal) {\r\n return new bigDecimal(subtract(this.value, number.getValue()));\r\n }\r\n\r\n static multiply(number1, number2) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return multiply(number1, number2);\r\n }\r\n\r\n multiply(number: bigDecimal) {\r\n return new bigDecimal(multiply(this.value, number.getValue()));\r\n }\r\n\r\n static divide(number1, number2, precision?: number) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return divide(number1, number2, precision);\r\n }\r\n\r\n divide(number: bigDecimal, precision?: number) {\r\n return new bigDecimal(divide(this.value, number.getValue(), precision));\r\n }\r\n\r\n static modulus(number1, number2) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return modulus(number1, number2);\r\n }\r\n\r\n modulus(number: bigDecimal) {\r\n return new bigDecimal(modulus(this.value, number.getValue()));\r\n }\r\n\r\n static compareTo(number1, number2) {\r\n number1 = bigDecimal.validate(number1);\r\n number2 = bigDecimal.validate(number2);\r\n return compareTo(number1, number2);\r\n }\r\n\r\n compareTo(number: bigDecimal) {\r\n return compareTo(this.value, number.getValue());\r\n }\r\n\r\n static negate(number) {\r\n number = bigDecimal.validate(number);\r\n return negate(number);\r\n }\r\n\r\n negate() {\r\n return new bigDecimal(negate(this.value));\r\n }\r\n\r\n static stripTrailingZero(number) {\r\n number = bigDecimal.validate(number);\r\n return stripTrailingZero(number);\r\n }\r\n\r\n stripTrailingZero() {\r\n return new bigDecimal(stripTrailingZero(this.value));\r\n }\r\n}\r\nexport default bigDecimal;\r\n"],"names":["Modes"],"mappings":"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"} \ No newline at end of file diff --git a/dist/node/js-big-decimal.js b/dist/node/js-big-decimal.js index f1aec5b..fe311b4 100644 --- a/dist/node/js-big-decimal.js +++ b/dist/node/js-big-decimal.js @@ -166,9 +166,11 @@ function testZero(number) { 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; + 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; } @@ -180,7 +182,7 @@ function compareTo(number1, number2) { number2 = number2.substr(1); negative = true; } - _a = (0, add_1.pad)(number1, number2), number1 = _a[0], number2 = _a[1]; + _b = (0, add_1.pad)(number1, number2), number1 = _b[0], number2 = _b[1]; if (number1.localeCompare(number2) == 0) { return 0; } @@ -208,6 +210,8 @@ function compareTo(number1, number2) { return 0; } exports.compareTo = compareTo; +function checkZero(number) { +} /***/ }), @@ -631,7 +635,7 @@ function stripTrailingZero(number) { if (number[0] == '.') { number = '0' + number; } - if (isNegative) { + if (isNegative && number != '0') { number = '-' + number; } return number; diff --git a/dist/node/js-big-decimal.min.js b/dist/node/js-big-decimal.min.js index 1b88bd2..3097115 100644 --- a/dist/node/js-big-decimal.min.js +++ b/dist/node/js-big-decimal.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.bigDecimal=t():e.bigDecimal=t()}(global,(function(){return function(){"use strict";var e={165:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.abs=void 0,t.abs=function(e){return"number"!=typeof e&&"bigint"!=typeof e||(e=e.toString()),"-"==e[0]?e.substring(1):e}},217:function(e,t){function n(e){if(u(e))return e;for(var t="",n=e.length,r=e.split(".")[1],i=r?r.length:0,a=0;a="0"&&e[a]<="9"?t+=9-parseInt(e[a]):t+=e[a];return o(t,i>0?"0."+new Array(i).join("0")+"1":"1")}function r(e){var t=e.split(".");for(t[0]||(t[0]="0");"0"==t[0][0]&&t[0].length>1;)t[0]=t[0].substring(1);return t[0]+(t[1]?"."+t[1]:"")}function i(e,t){var n=e.split("."),r=t.split("."),i=n[0].length,o=r[0].length;return i>o?r[0]=new Array(Math.abs(i-o)+1).join("0")+(r[0]?r[0]:""):n[0]=new Array(Math.abs(i-o)+1).join("0")+(n[0]?n[0]:""),i=n[1]?n[1].length:0,o=r[1]?r[1].length:0,(i||o)&&(i>o?r[1]=(r[1]?r[1]:"")+new Array(Math.abs(i-o)+1).join("0"):n[1]=(n[1]?n[1]:"")+new Array(Math.abs(i-o)+1).join("0")),[e=n[0]+(n[1]?"."+n[1]:""),t=r[0]+(r[1]?"."+r[1]:"")]}function o(e,t){var n;e=(n=i(e,t))[0],t=n[1];for(var r="",o=0,u=e.length-1;u>=0;u--)if("."!==e[u]){var a=parseInt(e[u])+parseInt(t[u])+o;r=a%10+r,o=Math.floor(a/10)}else r="."+r;return o?o.toString()+r:r}function u(e){return/^0[0]*[.]{0,1}[0]*$/.test(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.pad=t.trim=t.add=void 0,t.add=function(e,t){var a;void 0===t&&(t="0");var s=0,d=-1;"-"==e[0]&&(u(e=e.substring(1))||(s++,d=1,e.length)),"-"==t[0]&&(u(t=t.substring(1))||(s++,d=2,t.length)),e=r(e),t=r(t),e=(a=i(r(e),r(t)))[0],t=a[1],1==s&&(1===d?e=n(e):2===d&&(t=n(t)));var l=o(e,t);return s?2==s?"-"+r(l):e.lengtht[o]?i?-1:1:i?1:-1;return 0}},415:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.divide=void 0;var r=n(217),i=n(350);t.divide=function(e,t,n){if(void 0===n&&(n=8),0==t)throw new Error("Cannot divide by 0");if(e=e.toString(),t=t.toString(),e=e.replace(/(\.\d*?[1-9])0+$/g,"$1").replace(/\.0+$/,""),t=t.replace(/(\.\d*?[1-9])0+$/g,"$1").replace(/\.0+$/,""),0==e)return"0";var o=0;"-"==t[0]&&(t=t.substring(1),o++),"-"==e[0]&&(e=e.substring(1),o++);var u=t.indexOf(".")>0?t.length-t.indexOf(".")-1:-1;if(t=(0,r.trim)(t.replace(".","")),u>=0){var a=e.indexOf(".")>0?e.length-e.indexOf(".")-1:-1;if(-1==a)e=(0,r.trim)(e+new Array(u+1).join("0"));else if(u>a)e=e.replace(".",""),e=(0,r.trim)(e+new Array(u-a+1).join("0"));else if(u-1&&e.indexOf(".")-1&&e.indexOf(".")-1){var v=g.length-g.indexOf(".")-1;l>(g=g.replace(".","")).length&&(v+=l-g.length,g+=new Array(l-g.length+1).join("0")),d=v,f="0."+new Array(v).join("0")}for(n+=2;d<=n;){for(var p=0;parseInt(g)>=parseInt(t);)g=(0,r.add)(g,"-"+t),p++;f+=p,e?("."==e[0]&&(f+=".",d++,e=e.substring(1)),g+=e.substring(0,1),e=e.substring(1)):(d||(f+="."),d++,g+="0")}return(1==o?"-":"")+(0,r.trim)((0,i.roundOff)(f,n-2))}},213:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.modulus=void 0;var r=n(415),i=n(350),o=n(182),u=n(26),a=n(916);function s(e){if(-1!=e.indexOf("."))throw new Error("Modulus of non-integers not supported")}t.modulus=function(e,t){if(0==t)throw new Error("Cannot divide by 0");e=e.toString(),t=t.toString(),s(e),s(t);var n="";return"-"==e[0]&&(n="-",e=e.substr(1)),"-"==t[0]&&(t=t.substr(1)),n+(0,u.subtract)(e,(0,o.multiply)(t,(0,i.roundOff)((0,r.divide)(e,t),0,a.RoundingModes.FLOOR)))}},182:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.multiply=void 0;var r=n(859);t.multiply=function(e,t){e=e.toString(),t=t.toString();var n=0;"-"==e[0]&&(n++,e=e.substr(1)),"-"==t[0]&&(n++,t=t.substr(1)),e=(0,r.stripTrailingZero)(e),t=(0,r.stripTrailingZero)(t);var i=0,o=0;-1!=e.indexOf(".")&&(i=e.length-e.indexOf(".")-1),-1!=t.indexOf(".")&&(o=t.length-t.indexOf(".")-1);var u=i+o;if(e=(0,r.stripTrailingZero)(e.replace(".","")),t=(0,r.stripTrailingZero)(t.replace(".","")),e.length=v&&b>=0;b--)g[b]>-1&&g[b]=s.length?new Array(d-s.length+1).join("0")+s:s).substr(0,s.length-d)+"."+s.substr(s.length-d,d))),1==n&&(p="-"+p),p}},350:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.roundOff=void 0;var r=n(916);function i(e,t,n,i){if(!e||e===new Array(e.length+1).join("0"))return!1;if(i===r.RoundingModes.DOWN||!n&&i===r.RoundingModes.FLOOR||n&&i===r.RoundingModes.CEILING)return!1;if(i===r.RoundingModes.UP||n&&i===r.RoundingModes.FLOOR||!n&&i===r.RoundingModes.CEILING)return!0;var o="5"+new Array(e.length).join("0");if(e>o)return!0;if(e=0;r--){var i=parseInt(e[r])+t;10==i?(t=1,i=0):t=0,n+=i}return t&&(n+=t),n.split("").reverse().join("")}t.roundOff=function e(t,n,u){if(void 0===n&&(n=0),void 0===u&&(u=r.RoundingModes.HALF_EVEN),u===r.RoundingModes.UNNECESSARY)throw new Error("UNNECESSARY Rounding Mode has not yet been implemented");"number"!=typeof t&&"bigint"!=typeof t||(t=t.toString());var a=!1;"-"===t[0]&&(a=!0,t=t.substring(1));var s=t.split("."),d=s[0],l=s[1];if(n<0){if(n=-n,d.length<=n)return"0";var f=d.substr(0,d.length-n);return(a?"-":"")+(f=e(t=f+"."+d.substr(d.length-n)+l,0,u))+new Array(n+1).join("0")}if(0==n){d.length;return i(s[1],d,a,u)&&(d=o(d)),(a&&parseInt(d)?"-":"")+d}if(!s[1])return(a?"-":"")+d+"."+new Array(n+1).join("0");if(s[1].lengthn?(a?"-":"")+o(d,parseInt(l[0]))+"."+l.substring(1):(a&&(parseInt(d)||parseInt(l))?"-":"")+d+"."+l}},916:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.RoundingModes=void 0,function(e){e[e.CEILING=0]="CEILING",e[e.DOWN=1]="DOWN",e[e.FLOOR=2]="FLOOR",e[e.HALF_DOWN=3]="HALF_DOWN",e[e.HALF_EVEN=4]="HALF_EVEN",e[e.HALF_UP=5]="HALF_UP",e[e.UNNECESSARY=6]="UNNECESSARY",e[e.UP=7]="UP"}(t.RoundingModes||(t.RoundingModes={}))},859:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.stripTrailingZero=void 0,t.stripTrailingZero=function(e){var t="-"===e[0];for(t&&(e=e.substr(1));"0"==e[0];)e=e.substr(1);if(-1!=e.indexOf("."))for(;"0"==e[e.length-1];)e=e.substr(0,e.length-1);return""==e||"."==e?e="0":"."==e[e.length-1]&&(e=e.substr(0,e.length-1)),"."==e[0]&&(e="0"+e),t&&(e="-"+e),e}},26:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.negate=t.subtract=void 0;var r=n(217);function i(e){return e="-"==e[0]?e.substr(1):"-"+e}t.subtract=function(e,t){return e=e.toString(),t=i(t=t.toString()),(0,r.add)(e,t)},t.negate=i}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}var r={};return function(){var e=r;Object.defineProperty(e,"__esModule",{value:!0});var t=n(217),i=n(165),o=n(350),u=n(182),a=n(415),s=n(213),d=n(664),l=n(26),f=n(916),g=n(859),v=function(){function e(t){void 0===t&&(t="0"),this.value=e.validate(t)}return e.validate=function(e){if(e){if(e=e.toString(),isNaN(e))throw Error("Parameter is not a number: "+e);"+"==e[0]&&(e=e.substring(1))}else e="0";if(e.startsWith(".")?e="0"+e:e.startsWith("-.")&&(e="-0"+e.substr(1)),/e/i.test(e)){var n=e.split(/[eE]/),r=n[0],i=n[1],o="";"-"==(r=(0,t.trim)(r))[0]&&(o="-",r=r.substring(1)),r.indexOf(".")>=0?(i=parseInt(i)+r.indexOf("."),r=r.replace(".","")):i=parseInt(i)+r.length,e=r.length=i&&i>0?o+(0,t.trim)(r.substring(0,i))+(r.length>i?"."+r.substring(i):""):o+"0."+new Array(1-i).join("0")+r}return e},e.prototype.getValue=function(){return this.value},e.prototype.setValue=function(t){this.value=e.validate(t)},e.getPrettyValue=function(t,n,r){void 0===n&&(n=3),void 0===r&&(r=",");var i="-"==(t=e.validate(t)).charAt(0);i&&(t=t.substring(1));for(var o=t.indexOf("."),u="",a=o=o>0?o:t.length;a>0;)a=0?r:"")+u;return(i?"-":"")+u+t.substring(o)},e.prototype.getPrettyValue=function(t,n){return void 0===t&&(t=3),void 0===n&&(n=","),e.getPrettyValue(this.value,t,n)},e.round=function(t,n,r){if(void 0===n&&(n=0),void 0===r&&(r=f.RoundingModes.HALF_EVEN),t=e.validate(t),isNaN(n))throw Error("Precision is not a number: "+n);return(0,o.roundOff)(t,n,r)},e.prototype.round=function(t,n){if(void 0===t&&(t=0),void 0===n&&(n=f.RoundingModes.HALF_EVEN),isNaN(t))throw Error("Precision is not a number: "+t);return new e((0,o.roundOff)(this.value,t,n))},e.abs=function(t){return t=e.validate(t),(0,i.abs)(t)},e.prototype.abs=function(){return new e((0,i.abs)(this.value))},e.floor=function(t){return-1===(t=e.validate(t)).indexOf(".")?t:e.round(t,0,f.RoundingModes.FLOOR)},e.prototype.floor=function(){return-1===this.value.indexOf(".")?new e(this.value):new e(this.value).round(0,f.RoundingModes.FLOOR)},e.ceil=function(t){return-1===(t=e.validate(t)).indexOf(".")?t:e.round(t,0,f.RoundingModes.CEILING)},e.prototype.ceil=function(){return-1===this.value.indexOf(".")?new e(this.value):new e(this.value).round(0,f.RoundingModes.CEILING)},e.add=function(n,r){return n=e.validate(n),r=e.validate(r),(0,t.add)(n,r)},e.prototype.add=function(n){return new e((0,t.add)(this.value,n.getValue()))},e.subtract=function(t,n){return t=e.validate(t),n=e.validate(n),(0,l.subtract)(t,n)},e.prototype.subtract=function(t){return new e((0,l.subtract)(this.value,t.getValue()))},e.multiply=function(t,n){return t=e.validate(t),n=e.validate(n),(0,u.multiply)(t,n)},e.prototype.multiply=function(t){return new e((0,u.multiply)(this.value,t.getValue()))},e.divide=function(t,n,r){return t=e.validate(t),n=e.validate(n),(0,a.divide)(t,n,r)},e.prototype.divide=function(t,n){return new e((0,a.divide)(this.value,t.getValue(),n))},e.modulus=function(t,n){return t=e.validate(t),n=e.validate(n),(0,s.modulus)(t,n)},e.prototype.modulus=function(t){return new e((0,s.modulus)(this.value,t.getValue()))},e.compareTo=function(t,n){return t=e.validate(t),n=e.validate(n),(0,d.compareTo)(t,n)},e.prototype.compareTo=function(e){return(0,d.compareTo)(this.value,e.getValue())},e.negate=function(t){return t=e.validate(t),(0,l.negate)(t)},e.prototype.negate=function(){return new e((0,l.negate)(this.value))},e.stripTrailingZero=function(t){return t=e.validate(t),(0,g.stripTrailingZero)(t)},e.prototype.stripTrailingZero=function(){return new e((0,g.stripTrailingZero)(this.value))},e.RoundingModes=f.RoundingModes,e}();e.default=v}(),r}()})); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.bigDecimal=t():e.bigDecimal=t()}(global,(function(){return function(){"use strict";var e={165:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.abs=void 0,t.abs=function(e){return"number"!=typeof e&&"bigint"!=typeof e||(e=e.toString()),"-"==e[0]?e.substring(1):e}},217:function(e,t){function n(e){if(u(e))return e;for(var t="",n=e.length,r=e.split(".")[1],i=r?r.length:0,a=0;a="0"&&e[a]<="9"?t+=9-parseInt(e[a]):t+=e[a];return o(t,i>0?"0."+new Array(i).join("0")+"1":"1")}function r(e){var t=e.split(".");for(t[0]||(t[0]="0");"0"==t[0][0]&&t[0].length>1;)t[0]=t[0].substring(1);return t[0]+(t[1]?"."+t[1]:"")}function i(e,t){var n=e.split("."),r=t.split("."),i=n[0].length,o=r[0].length;return i>o?r[0]=new Array(Math.abs(i-o)+1).join("0")+(r[0]?r[0]:""):n[0]=new Array(Math.abs(i-o)+1).join("0")+(n[0]?n[0]:""),i=n[1]?n[1].length:0,o=r[1]?r[1].length:0,(i||o)&&(i>o?r[1]=(r[1]?r[1]:"")+new Array(Math.abs(i-o)+1).join("0"):n[1]=(n[1]?n[1]:"")+new Array(Math.abs(i-o)+1).join("0")),[e=n[0]+(n[1]?"."+n[1]:""),t=r[0]+(r[1]?"."+r[1]:"")]}function o(e,t){var n;e=(n=i(e,t))[0],t=n[1];for(var r="",o=0,u=e.length-1;u>=0;u--)if("."!==e[u]){var a=parseInt(e[u])+parseInt(t[u])+o;r=a%10+r,o=Math.floor(a/10)}else r="."+r;return o?o.toString()+r:r}function u(e){return/^0[0]*[.]{0,1}[0]*$/.test(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.pad=t.trim=t.add=void 0,t.add=function(e,t){var a;void 0===t&&(t="0");var s=0,d=-1;"-"==e[0]&&(u(e=e.substring(1))||(s++,d=1,e.length)),"-"==t[0]&&(u(t=t.substring(1))||(s++,d=2,t.length)),e=r(e),t=r(t),e=(a=i(r(e),r(t)))[0],t=a[1],1==s&&(1===d?e=n(e):2===d&&(t=n(t)));var l=o(e,t);return s?2==s?"-"+r(l):e.lengtht[a]?u?-1:1:u?1:-1;return 0}},415:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.divide=void 0;var r=n(217),i=n(350);t.divide=function(e,t,n){if(void 0===n&&(n=8),0==t)throw new Error("Cannot divide by 0");if(e=e.toString(),t=t.toString(),e=e.replace(/(\.\d*?[1-9])0+$/g,"$1").replace(/\.0+$/,""),t=t.replace(/(\.\d*?[1-9])0+$/g,"$1").replace(/\.0+$/,""),0==e)return"0";var o=0;"-"==t[0]&&(t=t.substring(1),o++),"-"==e[0]&&(e=e.substring(1),o++);var u=t.indexOf(".")>0?t.length-t.indexOf(".")-1:-1;if(t=(0,r.trim)(t.replace(".","")),u>=0){var a=e.indexOf(".")>0?e.length-e.indexOf(".")-1:-1;if(-1==a)e=(0,r.trim)(e+new Array(u+1).join("0"));else if(u>a)e=e.replace(".",""),e=(0,r.trim)(e+new Array(u-a+1).join("0"));else if(u-1&&e.indexOf(".")-1&&e.indexOf(".")-1){var v=g.length-g.indexOf(".")-1;l>(g=g.replace(".","")).length&&(v+=l-g.length,g+=new Array(l-g.length+1).join("0")),d=v,f="0."+new Array(v).join("0")}for(n+=2;d<=n;){for(var p=0;parseInt(g)>=parseInt(t);)g=(0,r.add)(g,"-"+t),p++;f+=p,e?("."==e[0]&&(f+=".",d++,e=e.substring(1)),g+=e.substring(0,1),e=e.substring(1)):(d||(f+="."),d++,g+="0")}return(1==o?"-":"")+(0,r.trim)((0,i.roundOff)(f,n-2))}},213:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.modulus=void 0;var r=n(415),i=n(350),o=n(182),u=n(26),a=n(916);function s(e){if(-1!=e.indexOf("."))throw new Error("Modulus of non-integers not supported")}t.modulus=function(e,t){if(0==t)throw new Error("Cannot divide by 0");e=e.toString(),t=t.toString(),s(e),s(t);var n="";return"-"==e[0]&&(n="-",e=e.substr(1)),"-"==t[0]&&(t=t.substr(1)),n+(0,u.subtract)(e,(0,o.multiply)(t,(0,i.roundOff)((0,r.divide)(e,t),0,a.RoundingModes.FLOOR)))}},182:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.multiply=void 0;var r=n(859);t.multiply=function(e,t){e=e.toString(),t=t.toString();var n=0;"-"==e[0]&&(n++,e=e.substr(1)),"-"==t[0]&&(n++,t=t.substr(1)),e=(0,r.stripTrailingZero)(e),t=(0,r.stripTrailingZero)(t);var i=0,o=0;-1!=e.indexOf(".")&&(i=e.length-e.indexOf(".")-1),-1!=t.indexOf(".")&&(o=t.length-t.indexOf(".")-1);var u=i+o;if(e=(0,r.stripTrailingZero)(e.replace(".","")),t=(0,r.stripTrailingZero)(t.replace(".","")),e.length=v&&b>=0;b--)g[b]>-1&&g[b]=s.length?new Array(d-s.length+1).join("0")+s:s).substr(0,s.length-d)+"."+s.substr(s.length-d,d))),1==n&&(p="-"+p),p}},350:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.roundOff=void 0;var r=n(916);function i(e,t,n,i){if(!e||e===new Array(e.length+1).join("0"))return!1;if(i===r.RoundingModes.DOWN||!n&&i===r.RoundingModes.FLOOR||n&&i===r.RoundingModes.CEILING)return!1;if(i===r.RoundingModes.UP||n&&i===r.RoundingModes.FLOOR||!n&&i===r.RoundingModes.CEILING)return!0;var o="5"+new Array(e.length).join("0");if(e>o)return!0;if(e=0;r--){var i=parseInt(e[r])+t;10==i?(t=1,i=0):t=0,n+=i}return t&&(n+=t),n.split("").reverse().join("")}t.roundOff=function e(t,n,u){if(void 0===n&&(n=0),void 0===u&&(u=r.RoundingModes.HALF_EVEN),u===r.RoundingModes.UNNECESSARY)throw new Error("UNNECESSARY Rounding Mode has not yet been implemented");"number"!=typeof t&&"bigint"!=typeof t||(t=t.toString());var a=!1;"-"===t[0]&&(a=!0,t=t.substring(1));var s=t.split("."),d=s[0],l=s[1];if(n<0){if(n=-n,d.length<=n)return"0";var f=d.substr(0,d.length-n);return(a?"-":"")+(f=e(t=f+"."+d.substr(d.length-n)+l,0,u))+new Array(n+1).join("0")}if(0==n){d.length;return i(s[1],d,a,u)&&(d=o(d)),(a&&parseInt(d)?"-":"")+d}if(!s[1])return(a?"-":"")+d+"."+new Array(n+1).join("0");if(s[1].lengthn?(a?"-":"")+o(d,parseInt(l[0]))+"."+l.substring(1):(a&&(parseInt(d)||parseInt(l))?"-":"")+d+"."+l}},916:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.RoundingModes=void 0,function(e){e[e.CEILING=0]="CEILING",e[e.DOWN=1]="DOWN",e[e.FLOOR=2]="FLOOR",e[e.HALF_DOWN=3]="HALF_DOWN",e[e.HALF_EVEN=4]="HALF_EVEN",e[e.HALF_UP=5]="HALF_UP",e[e.UNNECESSARY=6]="UNNECESSARY",e[e.UP=7]="UP"}(t.RoundingModes||(t.RoundingModes={}))},859:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.stripTrailingZero=void 0,t.stripTrailingZero=function(e){var t="-"===e[0];for(t&&(e=e.substr(1));"0"==e[0];)e=e.substr(1);if(-1!=e.indexOf("."))for(;"0"==e[e.length-1];)e=e.substr(0,e.length-1);return""==e||"."==e?e="0":"."==e[e.length-1]&&(e=e.substr(0,e.length-1)),"."==e[0]&&(e="0"+e),t&&"0"!=e&&(e="-"+e),e}},26:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.negate=t.subtract=void 0;var r=n(217);function i(e){return e="-"==e[0]?e.substr(1):"-"+e}t.subtract=function(e,t){return e=e.toString(),t=i(t=t.toString()),(0,r.add)(e,t)},t.negate=i}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}var r={};return function(){var e=r;Object.defineProperty(e,"__esModule",{value:!0});var t=n(217),i=n(165),o=n(350),u=n(182),a=n(415),s=n(213),d=n(664),l=n(26),f=n(916),g=n(859),v=function(){function e(t){void 0===t&&(t="0"),this.value=e.validate(t)}return e.validate=function(e){if(e){if(e=e.toString(),isNaN(e))throw Error("Parameter is not a number: "+e);"+"==e[0]&&(e=e.substring(1))}else e="0";if(e.startsWith(".")?e="0"+e:e.startsWith("-.")&&(e="-0"+e.substr(1)),/e/i.test(e)){var n=e.split(/[eE]/),r=n[0],i=n[1],o="";"-"==(r=(0,t.trim)(r))[0]&&(o="-",r=r.substring(1)),r.indexOf(".")>=0?(i=parseInt(i)+r.indexOf("."),r=r.replace(".","")):i=parseInt(i)+r.length,e=r.length=i&&i>0?o+(0,t.trim)(r.substring(0,i))+(r.length>i?"."+r.substring(i):""):o+"0."+new Array(1-i).join("0")+r}return e},e.prototype.getValue=function(){return this.value},e.prototype.setValue=function(t){this.value=e.validate(t)},e.getPrettyValue=function(t,n,r){void 0===n&&(n=3),void 0===r&&(r=",");var i="-"==(t=e.validate(t)).charAt(0);i&&(t=t.substring(1));for(var o=t.indexOf("."),u="",a=o=o>0?o:t.length;a>0;)a=0?r:"")+u;return(i?"-":"")+u+t.substring(o)},e.prototype.getPrettyValue=function(t,n){return void 0===t&&(t=3),void 0===n&&(n=","),e.getPrettyValue(this.value,t,n)},e.round=function(t,n,r){if(void 0===n&&(n=0),void 0===r&&(r=f.RoundingModes.HALF_EVEN),t=e.validate(t),isNaN(n))throw Error("Precision is not a number: "+n);return(0,o.roundOff)(t,n,r)},e.prototype.round=function(t,n){if(void 0===t&&(t=0),void 0===n&&(n=f.RoundingModes.HALF_EVEN),isNaN(t))throw Error("Precision is not a number: "+t);return new e((0,o.roundOff)(this.value,t,n))},e.abs=function(t){return t=e.validate(t),(0,i.abs)(t)},e.prototype.abs=function(){return new e((0,i.abs)(this.value))},e.floor=function(t){return-1===(t=e.validate(t)).indexOf(".")?t:e.round(t,0,f.RoundingModes.FLOOR)},e.prototype.floor=function(){return-1===this.value.indexOf(".")?new e(this.value):new e(this.value).round(0,f.RoundingModes.FLOOR)},e.ceil=function(t){return-1===(t=e.validate(t)).indexOf(".")?t:e.round(t,0,f.RoundingModes.CEILING)},e.prototype.ceil=function(){return-1===this.value.indexOf(".")?new e(this.value):new e(this.value).round(0,f.RoundingModes.CEILING)},e.add=function(n,r){return n=e.validate(n),r=e.validate(r),(0,t.add)(n,r)},e.prototype.add=function(n){return new e((0,t.add)(this.value,n.getValue()))},e.subtract=function(t,n){return t=e.validate(t),n=e.validate(n),(0,l.subtract)(t,n)},e.prototype.subtract=function(t){return new e((0,l.subtract)(this.value,t.getValue()))},e.multiply=function(t,n){return t=e.validate(t),n=e.validate(n),(0,u.multiply)(t,n)},e.prototype.multiply=function(t){return new e((0,u.multiply)(this.value,t.getValue()))},e.divide=function(t,n,r){return t=e.validate(t),n=e.validate(n),(0,a.divide)(t,n,r)},e.prototype.divide=function(t,n){return new e((0,a.divide)(this.value,t.getValue(),n))},e.modulus=function(t,n){return t=e.validate(t),n=e.validate(n),(0,s.modulus)(t,n)},e.prototype.modulus=function(t){return new e((0,s.modulus)(this.value,t.getValue()))},e.compareTo=function(t,n){return t=e.validate(t),n=e.validate(n),(0,d.compareTo)(t,n)},e.prototype.compareTo=function(e){return(0,d.compareTo)(this.value,e.getValue())},e.negate=function(t){return t=e.validate(t),(0,l.negate)(t)},e.prototype.negate=function(){return new e((0,l.negate)(this.value))},e.stripTrailingZero=function(t){return t=e.validate(t),(0,g.stripTrailingZero)(t)},e.prototype.stripTrailingZero=function(){return new e((0,g.stripTrailingZero)(this.value))},e.RoundingModes=f.RoundingModes,e}();e.default=v}(),r}()})); \ No newline at end of file diff --git a/dist/web/js-big-decimal.js b/dist/web/js-big-decimal.js index cd769d1..c0d7bab 100644 --- a/dist/web/js-big-decimal.js +++ b/dist/web/js-big-decimal.js @@ -157,9 +157,11 @@ function testZero(number) { 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; + 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; } @@ -171,7 +173,7 @@ function compareTo(number1, number2) { number2 = number2.substr(1); negative = true; } - _a = (0, add_1.pad)(number1, number2), number1 = _a[0], number2 = _a[1]; + _b = (0, add_1.pad)(number1, number2), number1 = _b[0], number2 = _b[1]; if (number1.localeCompare(number2) == 0) { return 0; } @@ -199,6 +201,8 @@ function compareTo(number1, number2) { return 0; } exports.compareTo = compareTo; +function checkZero(number) { +} /***/ }), @@ -622,7 +626,7 @@ function stripTrailingZero(number) { if (number[0] == '.') { number = '0' + number; } - if (isNegative) { + if (isNegative && number != '0') { number = '-' + number; } return number; diff --git a/dist/web/js-big-decimal.min.js b/dist/web/js-big-decimal.min.js index a6ecde4..23115af 100644 --- a/dist/web/js-big-decimal.min.js +++ b/dist/web/js-big-decimal.min.js @@ -1 +1 @@ -var bigDecimal;!function(){"use strict";var e={165:function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.abs=void 0,n.abs=function(e){return"number"!=typeof e&&"bigint"!=typeof e||(e=e.toString()),"-"==e[0]?e.substring(1):e}},217:function(e,n){function t(e){if(u(e))return e;for(var n="",t=e.length,r=e.split(".")[1],i=r?r.length:0,a=0;a="0"&&e[a]<="9"?n+=9-parseInt(e[a]):n+=e[a];return o(n,i>0?"0."+new Array(i).join("0")+"1":"1")}function r(e){var n=e.split(".");for(n[0]||(n[0]="0");"0"==n[0][0]&&n[0].length>1;)n[0]=n[0].substring(1);return n[0]+(n[1]?"."+n[1]:"")}function i(e,n){var t=e.split("."),r=n.split("."),i=t[0].length,o=r[0].length;return i>o?r[0]=new Array(Math.abs(i-o)+1).join("0")+(r[0]?r[0]:""):t[0]=new Array(Math.abs(i-o)+1).join("0")+(t[0]?t[0]:""),i=t[1]?t[1].length:0,o=r[1]?r[1].length:0,(i||o)&&(i>o?r[1]=(r[1]?r[1]:"")+new Array(Math.abs(i-o)+1).join("0"):t[1]=(t[1]?t[1]:"")+new Array(Math.abs(i-o)+1).join("0")),[e=t[0]+(t[1]?"."+t[1]:""),n=r[0]+(r[1]?"."+r[1]:"")]}function o(e,n){var t;e=(t=i(e,n))[0],n=t[1];for(var r="",o=0,u=e.length-1;u>=0;u--)if("."!==e[u]){var a=parseInt(e[u])+parseInt(n[u])+o;r=a%10+r,o=Math.floor(a/10)}else r="."+r;return o?o.toString()+r:r}function u(e){return/^0[0]*[.]{0,1}[0]*$/.test(e)}Object.defineProperty(n,"__esModule",{value:!0}),n.pad=n.trim=n.add=void 0,n.add=function(e,n){var a;void 0===n&&(n="0");var s=0,d=-1;"-"==e[0]&&(u(e=e.substring(1))||(s++,d=1,e.length)),"-"==n[0]&&(u(n=n.substring(1))||(s++,d=2,n.length)),e=r(e),n=r(n),e=(a=i(r(e),r(n)))[0],n=a[1],1==s&&(1===d?e=t(e):2===d&&(n=t(n)));var l=o(e,n);return s?2==s?"-"+r(l):e.lengthn[o]?i?-1:1:i?1:-1;return 0}},415:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.divide=void 0;var r=t(217),i=t(350);n.divide=function(e,n,t){if(void 0===t&&(t=8),0==n)throw new Error("Cannot divide by 0");if(e=e.toString(),n=n.toString(),e=e.replace(/(\.\d*?[1-9])0+$/g,"$1").replace(/\.0+$/,""),n=n.replace(/(\.\d*?[1-9])0+$/g,"$1").replace(/\.0+$/,""),0==e)return"0";var o=0;"-"==n[0]&&(n=n.substring(1),o++),"-"==e[0]&&(e=e.substring(1),o++);var u=n.indexOf(".")>0?n.length-n.indexOf(".")-1:-1;if(n=(0,r.trim)(n.replace(".","")),u>=0){var a=e.indexOf(".")>0?e.length-e.indexOf(".")-1:-1;if(-1==a)e=(0,r.trim)(e+new Array(u+1).join("0"));else if(u>a)e=e.replace(".",""),e=(0,r.trim)(e+new Array(u-a+1).join("0"));else if(u-1&&e.indexOf(".")-1&&e.indexOf(".")-1){var v=g.length-g.indexOf(".")-1;l>(g=g.replace(".","")).length&&(v+=l-g.length,g+=new Array(l-g.length+1).join("0")),d=v,f="0."+new Array(v).join("0")}for(t+=2;d<=t;){for(var p=0;parseInt(g)>=parseInt(n);)g=(0,r.add)(g,"-"+n),p++;f+=p,e?("."==e[0]&&(f+=".",d++,e=e.substring(1)),g+=e.substring(0,1),e=e.substring(1)):(d||(f+="."),d++,g+="0")}return(1==o?"-":"")+(0,r.trim)((0,i.roundOff)(f,t-2))}},213:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.modulus=void 0;var r=t(415),i=t(350),o=t(182),u=t(26),a=t(916);function s(e){if(-1!=e.indexOf("."))throw new Error("Modulus of non-integers not supported")}n.modulus=function(e,n){if(0==n)throw new Error("Cannot divide by 0");e=e.toString(),n=n.toString(),s(e),s(n);var t="";return"-"==e[0]&&(t="-",e=e.substr(1)),"-"==n[0]&&(n=n.substr(1)),t+(0,u.subtract)(e,(0,o.multiply)(n,(0,i.roundOff)((0,r.divide)(e,n),0,a.RoundingModes.FLOOR)))}},182:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.multiply=void 0;var r=t(859);n.multiply=function(e,n){e=e.toString(),n=n.toString();var t=0;"-"==e[0]&&(t++,e=e.substr(1)),"-"==n[0]&&(t++,n=n.substr(1)),e=(0,r.stripTrailingZero)(e),n=(0,r.stripTrailingZero)(n);var i=0,o=0;-1!=e.indexOf(".")&&(i=e.length-e.indexOf(".")-1),-1!=n.indexOf(".")&&(o=n.length-n.indexOf(".")-1);var u=i+o;if(e=(0,r.stripTrailingZero)(e.replace(".","")),n=(0,r.stripTrailingZero)(n.replace(".","")),e.length=v&&b>=0;b--)g[b]>-1&&g[b]=s.length?new Array(d-s.length+1).join("0")+s:s).substr(0,s.length-d)+"."+s.substr(s.length-d,d))),1==t&&(p="-"+p),p}},350:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.roundOff=void 0;var r=t(916);function i(e,n,t,i){if(!e||e===new Array(e.length+1).join("0"))return!1;if(i===r.RoundingModes.DOWN||!t&&i===r.RoundingModes.FLOOR||t&&i===r.RoundingModes.CEILING)return!1;if(i===r.RoundingModes.UP||t&&i===r.RoundingModes.FLOOR||!t&&i===r.RoundingModes.CEILING)return!0;var o="5"+new Array(e.length).join("0");if(e>o)return!0;if(e=0;r--){var i=parseInt(e[r])+n;10==i?(n=1,i=0):n=0,t+=i}return n&&(t+=n),t.split("").reverse().join("")}n.roundOff=function e(n,t,u){if(void 0===t&&(t=0),void 0===u&&(u=r.RoundingModes.HALF_EVEN),u===r.RoundingModes.UNNECESSARY)throw new Error("UNNECESSARY Rounding Mode has not yet been implemented");"number"!=typeof n&&"bigint"!=typeof n||(n=n.toString());var a=!1;"-"===n[0]&&(a=!0,n=n.substring(1));var s=n.split("."),d=s[0],l=s[1];if(t<0){if(t=-t,d.length<=t)return"0";var f=d.substr(0,d.length-t);return(a?"-":"")+(f=e(n=f+"."+d.substr(d.length-t)+l,0,u))+new Array(t+1).join("0")}if(0==t){d.length;return i(s[1],d,a,u)&&(d=o(d)),(a&&parseInt(d)?"-":"")+d}if(!s[1])return(a?"-":"")+d+"."+new Array(t+1).join("0");if(s[1].lengtht?(a?"-":"")+o(d,parseInt(l[0]))+"."+l.substring(1):(a&&(parseInt(d)||parseInt(l))?"-":"")+d+"."+l}},916:function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.RoundingModes=void 0,function(e){e[e.CEILING=0]="CEILING",e[e.DOWN=1]="DOWN",e[e.FLOOR=2]="FLOOR",e[e.HALF_DOWN=3]="HALF_DOWN",e[e.HALF_EVEN=4]="HALF_EVEN",e[e.HALF_UP=5]="HALF_UP",e[e.UNNECESSARY=6]="UNNECESSARY",e[e.UP=7]="UP"}(n.RoundingModes||(n.RoundingModes={}))},859:function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.stripTrailingZero=void 0,n.stripTrailingZero=function(e){var n="-"===e[0];for(n&&(e=e.substr(1));"0"==e[0];)e=e.substr(1);if(-1!=e.indexOf("."))for(;"0"==e[e.length-1];)e=e.substr(0,e.length-1);return""==e||"."==e?e="0":"."==e[e.length-1]&&(e=e.substr(0,e.length-1)),"."==e[0]&&(e="0"+e),n&&(e="-"+e),e}},26:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.negate=n.subtract=void 0;var r=t(217);function i(e){return e="-"==e[0]?e.substr(1):"-"+e}n.subtract=function(e,n){return e=e.toString(),n=i(n=n.toString()),(0,r.add)(e,n)},n.negate=i}},n={};function t(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={exports:{}};return e[r](o,o.exports,t),o.exports}var r={};!function(){var e=r;Object.defineProperty(e,"__esModule",{value:!0});var n=t(217),i=t(165),o=t(350),u=t(182),a=t(415),s=t(213),d=t(664),l=t(26),f=t(916),g=t(859),v=function(){function e(n){void 0===n&&(n="0"),this.value=e.validate(n)}return e.validate=function(e){if(e){if(e=e.toString(),isNaN(e))throw Error("Parameter is not a number: "+e);"+"==e[0]&&(e=e.substring(1))}else e="0";if(e.startsWith(".")?e="0"+e:e.startsWith("-.")&&(e="-0"+e.substr(1)),/e/i.test(e)){var t=e.split(/[eE]/),r=t[0],i=t[1],o="";"-"==(r=(0,n.trim)(r))[0]&&(o="-",r=r.substring(1)),r.indexOf(".")>=0?(i=parseInt(i)+r.indexOf("."),r=r.replace(".","")):i=parseInt(i)+r.length,e=r.length=i&&i>0?o+(0,n.trim)(r.substring(0,i))+(r.length>i?"."+r.substring(i):""):o+"0."+new Array(1-i).join("0")+r}return e},e.prototype.getValue=function(){return this.value},e.prototype.setValue=function(n){this.value=e.validate(n)},e.getPrettyValue=function(n,t,r){void 0===t&&(t=3),void 0===r&&(r=",");var i="-"==(n=e.validate(n)).charAt(0);i&&(n=n.substring(1));for(var o=n.indexOf("."),u="",a=o=o>0?o:n.length;a>0;)a=0?r:"")+u;return(i?"-":"")+u+n.substring(o)},e.prototype.getPrettyValue=function(n,t){return void 0===n&&(n=3),void 0===t&&(t=","),e.getPrettyValue(this.value,n,t)},e.round=function(n,t,r){if(void 0===t&&(t=0),void 0===r&&(r=f.RoundingModes.HALF_EVEN),n=e.validate(n),isNaN(t))throw Error("Precision is not a number: "+t);return(0,o.roundOff)(n,t,r)},e.prototype.round=function(n,t){if(void 0===n&&(n=0),void 0===t&&(t=f.RoundingModes.HALF_EVEN),isNaN(n))throw Error("Precision is not a number: "+n);return new e((0,o.roundOff)(this.value,n,t))},e.abs=function(n){return n=e.validate(n),(0,i.abs)(n)},e.prototype.abs=function(){return new e((0,i.abs)(this.value))},e.floor=function(n){return-1===(n=e.validate(n)).indexOf(".")?n:e.round(n,0,f.RoundingModes.FLOOR)},e.prototype.floor=function(){return-1===this.value.indexOf(".")?new e(this.value):new e(this.value).round(0,f.RoundingModes.FLOOR)},e.ceil=function(n){return-1===(n=e.validate(n)).indexOf(".")?n:e.round(n,0,f.RoundingModes.CEILING)},e.prototype.ceil=function(){return-1===this.value.indexOf(".")?new e(this.value):new e(this.value).round(0,f.RoundingModes.CEILING)},e.add=function(t,r){return t=e.validate(t),r=e.validate(r),(0,n.add)(t,r)},e.prototype.add=function(t){return new e((0,n.add)(this.value,t.getValue()))},e.subtract=function(n,t){return n=e.validate(n),t=e.validate(t),(0,l.subtract)(n,t)},e.prototype.subtract=function(n){return new e((0,l.subtract)(this.value,n.getValue()))},e.multiply=function(n,t){return n=e.validate(n),t=e.validate(t),(0,u.multiply)(n,t)},e.prototype.multiply=function(n){return new e((0,u.multiply)(this.value,n.getValue()))},e.divide=function(n,t,r){return n=e.validate(n),t=e.validate(t),(0,a.divide)(n,t,r)},e.prototype.divide=function(n,t){return new e((0,a.divide)(this.value,n.getValue(),t))},e.modulus=function(n,t){return n=e.validate(n),t=e.validate(t),(0,s.modulus)(n,t)},e.prototype.modulus=function(n){return new e((0,s.modulus)(this.value,n.getValue()))},e.compareTo=function(n,t){return n=e.validate(n),t=e.validate(t),(0,d.compareTo)(n,t)},e.prototype.compareTo=function(e){return(0,d.compareTo)(this.value,e.getValue())},e.negate=function(n){return n=e.validate(n),(0,l.negate)(n)},e.prototype.negate=function(){return new e((0,l.negate)(this.value))},e.stripTrailingZero=function(n){return n=e.validate(n),(0,g.stripTrailingZero)(n)},e.prototype.stripTrailingZero=function(){return new e((0,g.stripTrailingZero)(this.value))},e.RoundingModes=f.RoundingModes,e}();e.default=v}(),bigDecimal=r}(); \ No newline at end of file +var bigDecimal;!function(){"use strict";var e={165:function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.abs=void 0,n.abs=function(e){return"number"!=typeof e&&"bigint"!=typeof e||(e=e.toString()),"-"==e[0]?e.substring(1):e}},217:function(e,n){function t(e){if(u(e))return e;for(var n="",t=e.length,r=e.split(".")[1],i=r?r.length:0,a=0;a="0"&&e[a]<="9"?n+=9-parseInt(e[a]):n+=e[a];return o(n,i>0?"0."+new Array(i).join("0")+"1":"1")}function r(e){var n=e.split(".");for(n[0]||(n[0]="0");"0"==n[0][0]&&n[0].length>1;)n[0]=n[0].substring(1);return n[0]+(n[1]?"."+n[1]:"")}function i(e,n){var t=e.split("."),r=n.split("."),i=t[0].length,o=r[0].length;return i>o?r[0]=new Array(Math.abs(i-o)+1).join("0")+(r[0]?r[0]:""):t[0]=new Array(Math.abs(i-o)+1).join("0")+(t[0]?t[0]:""),i=t[1]?t[1].length:0,o=r[1]?r[1].length:0,(i||o)&&(i>o?r[1]=(r[1]?r[1]:"")+new Array(Math.abs(i-o)+1).join("0"):t[1]=(t[1]?t[1]:"")+new Array(Math.abs(i-o)+1).join("0")),[e=t[0]+(t[1]?"."+t[1]:""),n=r[0]+(r[1]?"."+r[1]:"")]}function o(e,n){var t;e=(t=i(e,n))[0],n=t[1];for(var r="",o=0,u=e.length-1;u>=0;u--)if("."!==e[u]){var a=parseInt(e[u])+parseInt(n[u])+o;r=a%10+r,o=Math.floor(a/10)}else r="."+r;return o?o.toString()+r:r}function u(e){return/^0[0]*[.]{0,1}[0]*$/.test(e)}Object.defineProperty(n,"__esModule",{value:!0}),n.pad=n.trim=n.add=void 0,n.add=function(e,n){var a;void 0===n&&(n="0");var s=0,d=-1;"-"==e[0]&&(u(e=e.substring(1))||(s++,d=1,e.length)),"-"==n[0]&&(u(n=n.substring(1))||(s++,d=2,n.length)),e=r(e),n=r(n),e=(a=i(r(e),r(n)))[0],n=a[1],1==s&&(1===d?e=t(e):2===d&&(n=t(n)));var l=o(e,n);return s?2==s?"-"+r(l):e.lengthn[a]?u?-1:1:u?1:-1;return 0}},415:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.divide=void 0;var r=t(217),i=t(350);n.divide=function(e,n,t){if(void 0===t&&(t=8),0==n)throw new Error("Cannot divide by 0");if(e=e.toString(),n=n.toString(),e=e.replace(/(\.\d*?[1-9])0+$/g,"$1").replace(/\.0+$/,""),n=n.replace(/(\.\d*?[1-9])0+$/g,"$1").replace(/\.0+$/,""),0==e)return"0";var o=0;"-"==n[0]&&(n=n.substring(1),o++),"-"==e[0]&&(e=e.substring(1),o++);var u=n.indexOf(".")>0?n.length-n.indexOf(".")-1:-1;if(n=(0,r.trim)(n.replace(".","")),u>=0){var a=e.indexOf(".")>0?e.length-e.indexOf(".")-1:-1;if(-1==a)e=(0,r.trim)(e+new Array(u+1).join("0"));else if(u>a)e=e.replace(".",""),e=(0,r.trim)(e+new Array(u-a+1).join("0"));else if(u-1&&e.indexOf(".")-1&&e.indexOf(".")-1){var v=g.length-g.indexOf(".")-1;l>(g=g.replace(".","")).length&&(v+=l-g.length,g+=new Array(l-g.length+1).join("0")),d=v,f="0."+new Array(v).join("0")}for(t+=2;d<=t;){for(var p=0;parseInt(g)>=parseInt(n);)g=(0,r.add)(g,"-"+n),p++;f+=p,e?("."==e[0]&&(f+=".",d++,e=e.substring(1)),g+=e.substring(0,1),e=e.substring(1)):(d||(f+="."),d++,g+="0")}return(1==o?"-":"")+(0,r.trim)((0,i.roundOff)(f,t-2))}},213:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.modulus=void 0;var r=t(415),i=t(350),o=t(182),u=t(26),a=t(916);function s(e){if(-1!=e.indexOf("."))throw new Error("Modulus of non-integers not supported")}n.modulus=function(e,n){if(0==n)throw new Error("Cannot divide by 0");e=e.toString(),n=n.toString(),s(e),s(n);var t="";return"-"==e[0]&&(t="-",e=e.substr(1)),"-"==n[0]&&(n=n.substr(1)),t+(0,u.subtract)(e,(0,o.multiply)(n,(0,i.roundOff)((0,r.divide)(e,n),0,a.RoundingModes.FLOOR)))}},182:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.multiply=void 0;var r=t(859);n.multiply=function(e,n){e=e.toString(),n=n.toString();var t=0;"-"==e[0]&&(t++,e=e.substr(1)),"-"==n[0]&&(t++,n=n.substr(1)),e=(0,r.stripTrailingZero)(e),n=(0,r.stripTrailingZero)(n);var i=0,o=0;-1!=e.indexOf(".")&&(i=e.length-e.indexOf(".")-1),-1!=n.indexOf(".")&&(o=n.length-n.indexOf(".")-1);var u=i+o;if(e=(0,r.stripTrailingZero)(e.replace(".","")),n=(0,r.stripTrailingZero)(n.replace(".","")),e.length=v&&b>=0;b--)g[b]>-1&&g[b]=s.length?new Array(d-s.length+1).join("0")+s:s).substr(0,s.length-d)+"."+s.substr(s.length-d,d))),1==t&&(p="-"+p),p}},350:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.roundOff=void 0;var r=t(916);function i(e,n,t,i){if(!e||e===new Array(e.length+1).join("0"))return!1;if(i===r.RoundingModes.DOWN||!t&&i===r.RoundingModes.FLOOR||t&&i===r.RoundingModes.CEILING)return!1;if(i===r.RoundingModes.UP||t&&i===r.RoundingModes.FLOOR||!t&&i===r.RoundingModes.CEILING)return!0;var o="5"+new Array(e.length).join("0");if(e>o)return!0;if(e=0;r--){var i=parseInt(e[r])+n;10==i?(n=1,i=0):n=0,t+=i}return n&&(t+=n),t.split("").reverse().join("")}n.roundOff=function e(n,t,u){if(void 0===t&&(t=0),void 0===u&&(u=r.RoundingModes.HALF_EVEN),u===r.RoundingModes.UNNECESSARY)throw new Error("UNNECESSARY Rounding Mode has not yet been implemented");"number"!=typeof n&&"bigint"!=typeof n||(n=n.toString());var a=!1;"-"===n[0]&&(a=!0,n=n.substring(1));var s=n.split("."),d=s[0],l=s[1];if(t<0){if(t=-t,d.length<=t)return"0";var f=d.substr(0,d.length-t);return(a?"-":"")+(f=e(n=f+"."+d.substr(d.length-t)+l,0,u))+new Array(t+1).join("0")}if(0==t){d.length;return i(s[1],d,a,u)&&(d=o(d)),(a&&parseInt(d)?"-":"")+d}if(!s[1])return(a?"-":"")+d+"."+new Array(t+1).join("0");if(s[1].lengtht?(a?"-":"")+o(d,parseInt(l[0]))+"."+l.substring(1):(a&&(parseInt(d)||parseInt(l))?"-":"")+d+"."+l}},916:function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.RoundingModes=void 0,function(e){e[e.CEILING=0]="CEILING",e[e.DOWN=1]="DOWN",e[e.FLOOR=2]="FLOOR",e[e.HALF_DOWN=3]="HALF_DOWN",e[e.HALF_EVEN=4]="HALF_EVEN",e[e.HALF_UP=5]="HALF_UP",e[e.UNNECESSARY=6]="UNNECESSARY",e[e.UP=7]="UP"}(n.RoundingModes||(n.RoundingModes={}))},859:function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.stripTrailingZero=void 0,n.stripTrailingZero=function(e){var n="-"===e[0];for(n&&(e=e.substr(1));"0"==e[0];)e=e.substr(1);if(-1!=e.indexOf("."))for(;"0"==e[e.length-1];)e=e.substr(0,e.length-1);return""==e||"."==e?e="0":"."==e[e.length-1]&&(e=e.substr(0,e.length-1)),"."==e[0]&&(e="0"+e),n&&"0"!=e&&(e="-"+e),e}},26:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.negate=n.subtract=void 0;var r=t(217);function i(e){return e="-"==e[0]?e.substr(1):"-"+e}n.subtract=function(e,n){return e=e.toString(),n=i(n=n.toString()),(0,r.add)(e,n)},n.negate=i}},n={};function t(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={exports:{}};return e[r](o,o.exports,t),o.exports}var r={};!function(){var e=r;Object.defineProperty(e,"__esModule",{value:!0});var n=t(217),i=t(165),o=t(350),u=t(182),a=t(415),s=t(213),d=t(664),l=t(26),f=t(916),g=t(859),v=function(){function e(n){void 0===n&&(n="0"),this.value=e.validate(n)}return e.validate=function(e){if(e){if(e=e.toString(),isNaN(e))throw Error("Parameter is not a number: "+e);"+"==e[0]&&(e=e.substring(1))}else e="0";if(e.startsWith(".")?e="0"+e:e.startsWith("-.")&&(e="-0"+e.substr(1)),/e/i.test(e)){var t=e.split(/[eE]/),r=t[0],i=t[1],o="";"-"==(r=(0,n.trim)(r))[0]&&(o="-",r=r.substring(1)),r.indexOf(".")>=0?(i=parseInt(i)+r.indexOf("."),r=r.replace(".","")):i=parseInt(i)+r.length,e=r.length=i&&i>0?o+(0,n.trim)(r.substring(0,i))+(r.length>i?"."+r.substring(i):""):o+"0."+new Array(1-i).join("0")+r}return e},e.prototype.getValue=function(){return this.value},e.prototype.setValue=function(n){this.value=e.validate(n)},e.getPrettyValue=function(n,t,r){void 0===t&&(t=3),void 0===r&&(r=",");var i="-"==(n=e.validate(n)).charAt(0);i&&(n=n.substring(1));for(var o=n.indexOf("."),u="",a=o=o>0?o:n.length;a>0;)a=0?r:"")+u;return(i?"-":"")+u+n.substring(o)},e.prototype.getPrettyValue=function(n,t){return void 0===n&&(n=3),void 0===t&&(t=","),e.getPrettyValue(this.value,n,t)},e.round=function(n,t,r){if(void 0===t&&(t=0),void 0===r&&(r=f.RoundingModes.HALF_EVEN),n=e.validate(n),isNaN(t))throw Error("Precision is not a number: "+t);return(0,o.roundOff)(n,t,r)},e.prototype.round=function(n,t){if(void 0===n&&(n=0),void 0===t&&(t=f.RoundingModes.HALF_EVEN),isNaN(n))throw Error("Precision is not a number: "+n);return new e((0,o.roundOff)(this.value,n,t))},e.abs=function(n){return n=e.validate(n),(0,i.abs)(n)},e.prototype.abs=function(){return new e((0,i.abs)(this.value))},e.floor=function(n){return-1===(n=e.validate(n)).indexOf(".")?n:e.round(n,0,f.RoundingModes.FLOOR)},e.prototype.floor=function(){return-1===this.value.indexOf(".")?new e(this.value):new e(this.value).round(0,f.RoundingModes.FLOOR)},e.ceil=function(n){return-1===(n=e.validate(n)).indexOf(".")?n:e.round(n,0,f.RoundingModes.CEILING)},e.prototype.ceil=function(){return-1===this.value.indexOf(".")?new e(this.value):new e(this.value).round(0,f.RoundingModes.CEILING)},e.add=function(t,r){return t=e.validate(t),r=e.validate(r),(0,n.add)(t,r)},e.prototype.add=function(t){return new e((0,n.add)(this.value,t.getValue()))},e.subtract=function(n,t){return n=e.validate(n),t=e.validate(t),(0,l.subtract)(n,t)},e.prototype.subtract=function(n){return new e((0,l.subtract)(this.value,n.getValue()))},e.multiply=function(n,t){return n=e.validate(n),t=e.validate(t),(0,u.multiply)(n,t)},e.prototype.multiply=function(n){return new e((0,u.multiply)(this.value,n.getValue()))},e.divide=function(n,t,r){return n=e.validate(n),t=e.validate(t),(0,a.divide)(n,t,r)},e.prototype.divide=function(n,t){return new e((0,a.divide)(this.value,n.getValue(),t))},e.modulus=function(n,t){return n=e.validate(n),t=e.validate(t),(0,s.modulus)(n,t)},e.prototype.modulus=function(n){return new e((0,s.modulus)(this.value,n.getValue()))},e.compareTo=function(n,t){return n=e.validate(n),t=e.validate(t),(0,d.compareTo)(n,t)},e.prototype.compareTo=function(e){return(0,d.compareTo)(this.value,e.getValue())},e.negate=function(n){return n=e.validate(n),(0,l.negate)(n)},e.prototype.negate=function(){return new e((0,l.negate)(this.value))},e.stripTrailingZero=function(n){return n=e.validate(n),(0,g.stripTrailingZero)(n)},e.prototype.stripTrailingZero=function(){return new e((0,g.stripTrailingZero)(this.value))},e.RoundingModes=f.RoundingModes,e}();e.default=v}(),bigDecimal=r}(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4db87a6..3f670ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "js-big-decimal", - "version": "2.0.6", + "version": "2.0.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "js-big-decimal", - "version": "2.0.6", + "version": "2.0.7", "license": "MIT", "devDependencies": { "@rollup/plugin-typescript": "^11.1.0", diff --git a/package.json b/package.json index 4f21d09..824285b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "js-big-decimal", - "version": "2.0.6", + "version": "2.0.7", "description": "Work with large numbers on the client side. Round them off to any required precision.", "main": "dist/node/js-big-decimal", "types": "dist/node/big-decimal", diff --git a/src/compareTo.spec.ts b/src/compareTo.spec.ts index 13c0360..9c53767 100644 --- a/src/compareTo.spec.ts +++ b/src/compareTo.spec.ts @@ -63,4 +63,7 @@ describe("compareTo", function () { it("should: 0.67, .6700 = 0", function () { expect(compareTo("0.67", ".6700")).toBe(0); }); + it("should: -0, 0 = 0", function () { + expect(compareTo("-0", "0")).toBe(0); + }); }); diff --git a/src/compareTo.ts b/src/compareTo.ts index 3075766..e97b0a5 100644 --- a/src/compareTo.ts +++ b/src/compareTo.ts @@ -1,7 +1,9 @@ import { pad } from './add'; +import {stripTrailingZero} from './stripTrailingZero'; export function compareTo(number1 : string, number2 : string) { let negative = false; + [number1, number2] = [number1, number2].map(n => stripTrailingZero(n)); if(number1[0] == '-' && number2[0] != "-"){ return -1; }else if(number1[0] != '-' && number2[0] == '-'){ @@ -33,4 +35,8 @@ export function compareTo(number1 : string, number2 : string) { } } return 0; +} + +function checkZero(number){ + } \ No newline at end of file diff --git a/src/stripTrailingZero.spec.ts b/src/stripTrailingZero.spec.ts index ae3c07d..e4e68e6 100644 --- a/src/stripTrailingZero.spec.ts +++ b/src/stripTrailingZero.spec.ts @@ -59,6 +59,21 @@ describe("stripTrailingZero", function () { expect(stripTrailingZero("-5.50000000000000000")).toBe("-5.5"); }); + // handle zeros + it("should: 0.00000 become 0", function () { + expect(stripTrailingZero("0.00000")).toBe("0"); + }); + it("should: -0.00000 become 0", function () { + expect(stripTrailingZero("-0.00000")).toBe("0"); + }); + it("should: 000 become 0", function () { + expect(stripTrailingZero("000")).toBe("0"); + }); + it("should: -000 become 0", function () { + expect(stripTrailingZero("-000")).toBe("0"); + }); + + // Usage in conjugation with rounding it("should: result of remove trailing zeroes then rounding 1.550 to 1 digit precision becomes 1.6", function () { expect((new bigDecimal("1.550")).stripTrailingZero().round(1).getValue()).toBe("1.6"); diff --git a/src/stripTrailingZero.ts b/src/stripTrailingZero.ts index 5b3778a..8780113 100644 --- a/src/stripTrailingZero.ts +++ b/src/stripTrailingZero.ts @@ -21,7 +21,7 @@ export function stripTrailingZero(number) { if (number[0] == '.') { number = '0' + number; } - if (isNegative) { + if (isNegative && number != '0') { number = '-' + number; } return number;