{"ScriptPreparationCode":"var DecimalPrecision = (function() {\r\n if (Math.trunc === undefined) {\r\n Math.trunc = function(v) {\r\n return v \u003C 0 ? Math.ceil(v) : Math.floor(v);\r\n };\r\n }\r\n // Decimal round (half away from zero)\r\n this.round = function(num, digits = 0) {\r\n num = (num \u002B \u0027e\u0027).split(\u0027e\u0027);\r\n num = Math.sign(\u002Bnum[0]) * Math.round(Math.abs(\u002Bnum[0]) \u002B \u0027e\u0027 \u002B (\u002Bnum[1] \u002B digits));\r\n num = (num \u002B \u0027e\u0027).split(\u0027e\u0027);\r\n return \u002B(num[0] \u002B \u0027e\u0027 \u002B (\u002Bnum[1] - digits));\r\n };\r\n // Decimal ceil\r\n this.ceil = function(num, digits = 0) {\r\n num = (num \u002B \u0027e\u0027).split(\u0027e\u0027);\r\n num = Math.ceil(num[0] \u002B \u0027e\u0027 \u002B (\u002Bnum[1] \u002B digits));\r\n num = (num \u002B \u0027e\u0027).split(\u0027e\u0027);\r\n return \u002B(num[0] \u002B \u0027e\u0027 \u002B (\u002Bnum[1] - digits));\r\n };\r\n // Decimal floor\r\n this.floor = function(num, digits = 0) {\r\n num = (num \u002B \u0027e\u0027).split(\u0027e\u0027);\r\n num = Math.floor(num[0] \u002B \u0027e\u0027 \u002B (\u002Bnum[1] \u002B digits));\r\n num = (num \u002B \u0027e\u0027).split(\u0027e\u0027);\r\n return \u002B(num[0] \u002B \u0027e\u0027 \u002B (\u002Bnum[1] - digits));\r\n };\r\n // Decimal trunc\r\n this.trunc = function(num, digits = 0) {\r\n num = (num \u002B \u0027e\u0027).split(\u0027e\u0027);\r\n num = Math.trunc(num[0] \u002B \u0027e\u0027 \u002B (\u002Bnum[1] \u002B digits));\r\n num = (num \u002B \u0027e\u0027).split(\u0027e\u0027);\r\n return \u002B(num[0] \u002B \u0027e\u0027 \u002B (\u002Bnum[1] - digits));\r\n };\r\n return this;\r\n})();\r\n\r\nvar DecimalPrecision2 = (function() {\r\n if (Number.EPSILON === undefined) {\r\n Number.EPSILON = Math.pow(2, -52);\r\n }\r\n if (Math.trunc === undefined) {\r\n Math.trunc = function(v) {\r\n return v \u003C 0 ? Math.ceil(v) : Math.floor(v);\r\n };\r\n }\r\n this.isRound = function(num, digits = 0) {\r\n //return Number(num.toFixed(digits)) === num;\r\n return this.round(num, digits) === num;\r\n };\r\n // Decimal round (half away from zero)\r\n this.round = function(num, digits = 0) {\r\n var p = Math.pow(10, digits);\r\n var e = 0.51 * Number.EPSILON * num;\r\n return Math.round((num \u002B e) * p) / p;\r\n };\r\n // Decimal ceil\r\n this.ceil = function(num, digits = 0) {\r\n if (this.isRound(num, digits))\r\n return num;\r\n var p = Math.pow(10, digits);\r\n var e = 0.51 * Number.EPSILON * num;\r\n return Math.ceil((num \u002B e) * p) / p;\r\n };\r\n // Decimal floor\r\n this.floor = function(num, digits = 0) {\r\n if (this.isRound(num, digits))\r\n return num;\r\n var p = Math.pow(10, digits);\r\n var e = 0.51 * Number.EPSILON * num;\r\n return Math.floor((num \u002B e) * p) / p;\r\n };\r\n // Decimal trunc\r\n this.trunc = function(num, digits = 0) {\r\n if (this.isRound(num, digits))\r\n return num;\r\n var p = Math.pow(10, digits);\r\n var e = 0.51 * Number.EPSILON * num;\r\n return Math.trunc((num \u002B e) * p) / p;\r\n };\r\n return this;\r\n})();","TestCases":[{"Name":"String","Code":"// test rounding of half\r\nDecimalPrecision.round(0.5); // 1\r\nDecimalPrecision.round(-0.5); // -1\r\n\r\n// testing very small numbers\r\nDecimalPrecision.ceil(1e-8, 2); // 0.01\r\nDecimalPrecision.floor(1e-8, 2); // 0\r\n\r\n// testing simple cases\r\nDecimalPrecision.round(5.12, 1); // 5.1\r\nDecimalPrecision.round(-5.12, 1); // -5.1\r\nDecimalPrecision.ceil(5.12, 1); // 5.2\r\nDecimalPrecision.ceil(-5.12, 1); // -5.1\r\nDecimalPrecision.floor(5.12, 1); // 5.1\r\nDecimalPrecision.floor(-5.12, 1); // -5.2\r\nDecimalPrecision.trunc(5.12, 1); // 5.1\r\nDecimalPrecision.trunc(-5.12, 1); // -5.1\r\n\r\n// testing edge cases for round\r\nDecimalPrecision.round(1.005, 2); // 1.01\r\nDecimalPrecision.round(39.425, 2); // 39.43\r\nDecimalPrecision.round(-1.005, 2); // -1.01\r\nDecimalPrecision.round(-39.425, 2); // -39.43\r\n\r\n// testing edge cases for ceil\r\nDecimalPrecision.ceil(9.130, 2); // 9.13\r\nDecimalPrecision.ceil(65.180, 2); // 65.18\r\nDecimalPrecision.ceil(-2.260, 2); // -2.26\r\nDecimalPrecision.ceil(-18.150, 2); // -18.15\r\n\r\n// testing edge cases for floor\r\nDecimalPrecision.floor(2.260, 2); // 2.26\r\nDecimalPrecision.floor(18.150, 2); // 18.15\r\nDecimalPrecision.floor(-9.130, 2); // -9.13\r\nDecimalPrecision.floor(-65.180, 2); // -65.18\r\n\r\n// testing edge cases for trunc\r\nDecimalPrecision.trunc(2.260, 2); // 2.26\r\nDecimalPrecision.trunc(18.150, 2); // 18.15\r\nDecimalPrecision.trunc(-2.260, 2); // -2.26\r\nDecimalPrecision.trunc(-18.150, 2); // -18.15\r\n\r\n// testing round to tens and hundreds\r\nDecimalPrecision.round(1262.48, -1); // 1260\r\nDecimalPrecision.round(1262.48, -2); // 1300\r\n","IsDeferred":false},{"Name":"Arithmetic","Code":"// test rounding of half\r\nDecimalPrecision2.round(0.5); // 1\r\nDecimalPrecision2.round(-0.5); // -1\r\n\r\n// testing very small numbers\r\nDecimalPrecision2.ceil(1e-8, 2); // 0.01\r\nDecimalPrecision2.floor(1e-8, 2); // 0\r\n\r\n// testing simple cases\r\nDecimalPrecision2.round(5.12, 1); // 5.1\r\nDecimalPrecision2.round(-5.12, 1); // -5.1\r\nDecimalPrecision2.ceil(5.12, 1); // 5.2\r\nDecimalPrecision2.ceil(-5.12, 1); // -5.1\r\nDecimalPrecision2.floor(5.12, 1); // 5.1\r\nDecimalPrecision2.floor(-5.12, 1); // -5.2\r\nDecimalPrecision2.trunc(5.12, 1); // 5.1\r\nDecimalPrecision2.trunc(-5.12, 1); // -5.1\r\n\r\n// testing edge cases for round\r\nDecimalPrecision2.round(1.005, 2); // 1.01\r\nDecimalPrecision2.round(39.425, 2); // 39.43\r\nDecimalPrecision2.round(-1.005, 2); // -1.01\r\nDecimalPrecision2.round(-39.425, 2); // -39.43\r\n\r\n// testing edge cases for ceil\r\nDecimalPrecision2.ceil(9.130, 2); // 9.13\r\nDecimalPrecision2.ceil(65.180, 2); // 65.18\r\nDecimalPrecision2.ceil(-2.260, 2); // -2.26\r\nDecimalPrecision2.ceil(-18.150, 2); // -18.15\r\n\r\n// testing edge cases for floor\r\nDecimalPrecision2.floor(2.260, 2); // 2.26\r\nDecimalPrecision2.floor(18.150, 2); // 18.15\r\nDecimalPrecision2.floor(-9.130, 2); // -9.13\r\nDecimalPrecision2.floor(-65.180, 2); // -65.18\r\n\r\n// testing edge cases for trunc\r\nDecimalPrecision2.trunc(2.260, 2); // 2.26\r\nDecimalPrecision2.trunc(18.150, 2); // 18.15\r\nDecimalPrecision2.trunc(-2.260, 2); // -2.26\r\nDecimalPrecision2.trunc(-18.150, 2); // -18.15\r\n\r\n// testing round to tens and hundreds\r\nDecimalPrecision2.round(1262.48, -1); // 1260\r\nDecimalPrecision2.round(1262.48, -2); // 1300\r\n","IsDeferred":false}]}