diff --git a/packages/typescript/dist/Main.js b/packages/typescript/dist/Main.js index ad84c82..948e4a1 100644 --- a/packages/typescript/dist/Main.js +++ b/packages/typescript/dist/Main.js @@ -41,7 +41,7 @@ var Calculator = (function (_super) { } return emptyValue; }; - Calculator.prototype.newtonMethod = function (valueA, valueB, valueC, valueD, checkedYes) { + Calculator.prototype.newtonMethod = function (valueA, valueB, valueC, valueD, checkedYes, locale) { var derivedValueA = valueA * 3; var derivedValueB = valueB * 2; var derivedValueC = valueC * 1; @@ -125,7 +125,7 @@ var Calculator = (function (_super) { if (checkedYes) { return { value: [firstRootCritical[0]], - msg: "It has only 1 real root in X = ".concat(firstRootCritical[0].toFixed(4)), + msg: "It has only 1 real root in X = ".concat(firstRootCritical[0].toLocaleString(locale, { maximumFractionDigits: 4 })), }; } else { @@ -136,10 +136,10 @@ var Calculator = (function (_super) { } } else if (firstRootCritical[0].toFixed(4) == firstRootCritical[2].toFixed(4)) { - this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes); + this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes, locale); } else if (firstRootCritical[1].toFixed(4) == firstRootCritical[2].toFixed(4)) { - this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes); + this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes, locale); } else { if (checkedYes) { @@ -149,7 +149,7 @@ var Calculator = (function (_super) { firstRootCritical[1], firstRootCritical[2], ], - msg: "X1 \u2245 ".concat(firstRootCritical[0].toFixed(4), ", X2 \u2245 ").concat(firstRootCritical[1].toFixed(4), ", X3 \u2245 ").concat(firstRootCritical[2].toFixed(4)), + msg: "X1 \u2245 ".concat(firstRootCritical[0].toLocaleString(locale, { maximumFractionDigits: 4 }), ", X2 \u2245 ").concat(firstRootCritical[1].toLocaleString(locale, { maximumFractionDigits: 4 }), ", X3 \u2245 ").concat(firstRootCritical[2].toLocaleString(locale, { maximumFractionDigits: 4 })), }; } else { @@ -168,7 +168,7 @@ var Calculator = (function (_super) { msg: "X1 = ".concat(firstRootCritical[0]), }; }; - Calculator.prototype.ruffiniDevice = function (valueA, valueB, valueC, valueD, roots, checkedYes) { + Calculator.prototype.ruffiniDevice = function (valueA, valueB, valueC, valueD, roots, checkedYes, locale) { var first = valueA * roots[0]; var secondCoefficient = Number(first) + Number(valueB); var second = secondCoefficient * roots[0]; @@ -197,7 +197,9 @@ var Calculator = (function (_super) { if (checkedYes) { return { value: [0, answer1], - msg: "The value of X1 = 0 and X2 is equal to: ".concat(answer1.toFixed(2), " | X2 = X3"), + msg: "The value of X1 = 0 and X2 is equal to: ".concat(answer1.toLocaleString(locale, { + maximumFractionDigits: 4, + }), " | X2 = X3"), }; } else { @@ -213,7 +215,9 @@ var Calculator = (function (_super) { if (checkedYes) { return { value: [roots[0], answer2], - msg: "The value of X1 = ".concat(roots[0], " and X2 = ").concat(answer2.toFixed(2), " | X1 = X3"), + msg: "The value of X1 = ".concat(roots[0], " and X2 = ").concat(answer2.toLocaleString(locale, { + maximumFractionDigits: 4, + }), " | X1 = X3"), }; } else { @@ -227,7 +231,9 @@ var Calculator = (function (_super) { if (checkedYes) { return { value: [roots[0], answer1], - msg: "The value of X1 = ".concat(roots[0], " and X2 it's the same as: ").concat(answer1.toFixed(2), " | X1 = X3"), + msg: "The value of X1 = ".concat(roots[0], " and X2 it's the same as: ").concat(answer1.toLocaleString(locale, { + maximumFractionDigits: 4, + }), " | X1 = X3"), }; } else { @@ -241,7 +247,11 @@ var Calculator = (function (_super) { if (checkedYes) { return { value: [roots[0], answer1, answer2], - msg: "The value of X1 = ".concat(roots[0], ", X2 it's the same as: ").concat(answer1.toFixed(2), " and The value of X3 it's the same as: ").concat(answer2.toFixed(2)), + msg: "The value of X1 = ".concat(roots[0], ", X2 it's the same as: ").concat(answer1.toLocaleString(locale, { + maximumFractionDigits: 4, + }), " and The value of X3 it's the same as: ").concat(answer2.toLocaleString(locale, { + maximumFractionDigits: 4, + })), }; } else { @@ -255,7 +265,7 @@ var Calculator = (function (_super) { } } else if (fourthCoefficient != 0) { - return this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes); + return this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes, locale); } else { return { @@ -446,12 +456,13 @@ var Calculator = (function (_super) { } } }; - Calculator.prototype.cubicEquation = function (a, b, c, d, approximate) { + Calculator.prototype.cubicEquation = function (a, b, c, d, approximate, locale) { if (a === void 0) { a = 0; } if (b === void 0) { b = 0; } if (c === void 0) { c = 0; } if (d === void 0) { d = 0; } if (approximate === void 0) { approximate = false; } + if (locale === void 0) { locale = "en-US"; } var checkedYes = approximate; var valueA = Number(a); var valueB = Number(b); @@ -480,7 +491,9 @@ var Calculator = (function (_super) { if (checkedYes) { return { value: [0, answer1], - msg: "The value of X1 = 0 and X2 is equal to: ".concat(answer1.toFixed(2), " | X2 = X3"), + msg: "The value of X1 = 0 and X2 is equal to: ".concat(answer1.toLocaleString(locale, { + maximumFractionDigits: 4, + }), " | X2 = X3"), }; } else { @@ -496,7 +509,9 @@ var Calculator = (function (_super) { if (checkedYes) { return { value: [0, answer2], - msg: "The value of X1 = 0 and X2 = ".concat(answer2.toFixed(2), " | X1 = X3"), + msg: "The value of X1 = 0 and X2 = ".concat(answer2.toLocaleString(locale, { + maximumFractionDigits: 4, + }), " | X1 = X3"), }; } else { @@ -510,7 +525,9 @@ var Calculator = (function (_super) { if (checkedYes) { return { value: [0, answer1], - msg: "The value of X1 = 0 and X2 = ".concat(answer1.toFixed(2), " | X1 = X3"), + msg: "The value of X1 = 0 and X2 = ".concat(answer1.toLocaleString(locale, { + maximumFractionDigits: 4, + }), " | X1 = X3"), }; } else { @@ -524,7 +541,11 @@ var Calculator = (function (_super) { if (checkedYes) { return { value: [0, answer1, answer2], - msg: "The value of X1 = 0, X2 it's the same as: ".concat(answer1.toFixed(2), " and The value of X3 it's the same as: ").concat(answer2.toFixed(2)), + msg: "The value of X1 = 0, X2 it's the same as: ".concat(answer1.toLocaleString(locale, { + maximumFractionDigits: 4, + }), " and The value of X3 it's the same as: ").concat(answer2.toLocaleString(locale, { + maximumFractionDigits: 4, + })), }; } else { @@ -568,9 +589,9 @@ var Calculator = (function (_super) { } }); if (roots_1.length === 0) { - return this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes); + return this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes, locale); } - return this.ruffiniDevice(valueA, valueB, valueC, valueD, roots_1, checkedYes); + return this.ruffiniDevice(valueA, valueB, valueC, valueD, roots_1, checkedYes, locale); } }; return Calculator; diff --git a/packages/typescript/package.json b/packages/typescript/package.json index f7bedba..a05d207 100644 --- a/packages/typescript/package.json +++ b/packages/typescript/package.json @@ -1,6 +1,6 @@ { "name": "loganmatic", - "version": "1.1.6", + "version": "1.1.7", "description": "Math library with some functions to facilitate calculations", "publisher": "Gabriel Logan", "main": "./dist/loganmatic.js", diff --git a/packages/typescript/src/Main.ts b/packages/typescript/src/Main.ts index dde77e2..9ef8825 100644 --- a/packages/typescript/src/Main.ts +++ b/packages/typescript/src/Main.ts @@ -60,6 +60,7 @@ export default class Calculator extends ArithmeticOp { valueC: number, valueD: number, checkedYes: boolean, + locale: string, ) { const derivedValueA = valueA * 3; const derivedValueB = valueB * 2; @@ -176,7 +177,7 @@ export default class Calculator extends ArithmeticOp { if (checkedYes) { return { value: [firstRootCritical[0]], - msg: `It has only 1 real root in X = ${firstRootCritical[0].toFixed(4)}`, + msg: `It has only 1 real root in X = ${firstRootCritical[0].toLocaleString(locale, { maximumFractionDigits: 4 })}`, }; } else { return { @@ -187,11 +188,11 @@ export default class Calculator extends ArithmeticOp { } else if ( firstRootCritical[0].toFixed(4) == firstRootCritical[2].toFixed(4) ) { - this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes); + this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes, locale); } else if ( firstRootCritical[1].toFixed(4) == firstRootCritical[2].toFixed(4) ) { - this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes); + this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes, locale); } else { if (checkedYes) { return { @@ -200,7 +201,7 @@ export default class Calculator extends ArithmeticOp { firstRootCritical[1], firstRootCritical[2], ], - msg: `X1 ≅ ${firstRootCritical[0].toFixed(4)}, X2 ≅ ${firstRootCritical[1].toFixed(4)}, X3 ≅ ${firstRootCritical[2].toFixed(4)}`, + msg: `X1 ≅ ${firstRootCritical[0].toLocaleString(locale, { maximumFractionDigits: 4 })}, X2 ≅ ${firstRootCritical[1].toLocaleString(locale, { maximumFractionDigits: 4 })}, X3 ≅ ${firstRootCritical[2].toLocaleString(locale, { maximumFractionDigits: 4 })}`, }; } else { return { @@ -235,6 +236,7 @@ export default class Calculator extends ArithmeticOp { valueD: number, roots: number[], checkedYes: boolean, + locale: string, ) { const first = valueA * roots[0]; @@ -270,7 +272,12 @@ export default class Calculator extends ArithmeticOp { if (checkedYes) { return { value: [0, answer1], - msg: `The value of X1 = 0 and X2 is equal to: ${answer1.toFixed(2)} | X2 = X3`, + msg: `The value of X1 = 0 and X2 is equal to: ${answer1.toLocaleString( + locale, + { + maximumFractionDigits: 4, + }, + )} | X2 = X3`, }; } else { return { @@ -284,7 +291,12 @@ export default class Calculator extends ArithmeticOp { if (checkedYes) { return { value: [roots[0], answer2], - msg: `The value of X1 = ${roots[0]} and X2 = ${answer2.toFixed(2)} | X1 = X3`, + msg: `The value of X1 = ${roots[0]} and X2 = ${answer2.toLocaleString( + locale, + { + maximumFractionDigits: 4, + }, + )} | X1 = X3`, }; } else { return { @@ -296,7 +308,12 @@ export default class Calculator extends ArithmeticOp { if (checkedYes) { return { value: [roots[0], answer1], - msg: `The value of X1 = ${roots[0]} and X2 it's the same as: ${answer1.toFixed(2)} | X1 = X3`, + msg: `The value of X1 = ${roots[0]} and X2 it's the same as: ${answer1.toLocaleString( + locale, + { + maximumFractionDigits: 4, + }, + )} | X1 = X3`, }; } else { return { @@ -308,7 +325,17 @@ export default class Calculator extends ArithmeticOp { if (checkedYes) { return { value: [roots[0], answer1, answer2], - msg: `The value of X1 = ${roots[0]}, X2 it's the same as: ${answer1.toFixed(2)} and The value of X3 it's the same as: ${answer2.toFixed(2)}`, + msg: `The value of X1 = ${roots[0]}, X2 it's the same as: ${answer1.toLocaleString( + locale, + { + maximumFractionDigits: 4, + }, + )} and The value of X3 it's the same as: ${answer2.toLocaleString( + locale, + { + maximumFractionDigits: 4, + }, + )}`, }; } else { return { @@ -320,7 +347,14 @@ export default class Calculator extends ArithmeticOp { } } } else if (fourthCoefficient != 0) { - return this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes); + return this.newtonMethod( + valueA, + valueB, + valueC, + valueD, + checkedYes, + locale, + ); } else { return { value: null, @@ -648,6 +682,7 @@ export default class Calculator extends ArithmeticOp { * @param c * @param d * @param [approximate=false] + * @param [locale="en-US"] // The locale to format the number * @example Mathematics.cubicEquation(a, b, c, d) * * a = coefficient of (x^3) @@ -655,6 +690,8 @@ export default class Calculator extends ArithmeticOp { * c = coefficient of (x) * d = constant term * + * EX: a(x^3) + b(x^2) + c(x) + d = 0 + * * Mathematics.cubicEquation(1, 2, -3, 5) * @return - It has only 1 real root in X = -3.344171229347796 */ @@ -664,6 +701,7 @@ export default class Calculator extends ArithmeticOp { c = 0, d = 0, approximate = false, + locale = "en-US", ): ReturnTypesForEquation2upDegree { const checkedYes = approximate; const valueA = Number(a); @@ -694,7 +732,12 @@ export default class Calculator extends ArithmeticOp { if (checkedYes) { return { value: [0, answer1], - msg: `The value of X1 = 0 and X2 is equal to: ${answer1.toFixed(2)} | X2 = X3`, + msg: `The value of X1 = 0 and X2 is equal to: ${answer1.toLocaleString( + locale, + { + maximumFractionDigits: 4, + }, + )} | X2 = X3`, }; } else { return { @@ -708,7 +751,12 @@ export default class Calculator extends ArithmeticOp { if (checkedYes) { return { value: [0, answer2], - msg: `The value of X1 = 0 and X2 = ${answer2.toFixed(2)} | X1 = X3`, + msg: `The value of X1 = 0 and X2 = ${answer2.toLocaleString( + locale, + { + maximumFractionDigits: 4, + }, + )} | X1 = X3`, }; } else { return { @@ -720,7 +768,12 @@ export default class Calculator extends ArithmeticOp { if (checkedYes) { return { value: [0, answer1], - msg: `The value of X1 = 0 and X2 = ${answer1.toFixed(2)} | X1 = X3`, + msg: `The value of X1 = 0 and X2 = ${answer1.toLocaleString( + locale, + { + maximumFractionDigits: 4, + }, + )} | X1 = X3`, }; } else { return { @@ -732,7 +785,17 @@ export default class Calculator extends ArithmeticOp { if (checkedYes) { return { value: [0, answer1, answer2], - msg: `The value of X1 = 0, X2 it's the same as: ${answer1.toFixed(2)} and The value of X3 it's the same as: ${answer2.toFixed(2)}`, + msg: `The value of X1 = 0, X2 it's the same as: ${answer1.toLocaleString( + locale, + { + maximumFractionDigits: 4, + }, + )} and The value of X3 it's the same as: ${answer2.toLocaleString( + locale, + { + maximumFractionDigits: 4, + }, + )}`, }; } else { return { @@ -777,7 +840,14 @@ export default class Calculator extends ArithmeticOp { }); if (roots.length === 0) { - return this.newtonMethod(valueA, valueB, valueC, valueD, checkedYes); + return this.newtonMethod( + valueA, + valueB, + valueC, + valueD, + checkedYes, + locale, + ); } return this.ruffiniDevice( @@ -787,6 +857,7 @@ export default class Calculator extends ArithmeticOp { valueD, roots, checkedYes, + locale, ); } } diff --git a/packages/typescript/tests/equations.test.ts b/packages/typescript/tests/equations.test.ts index a9381f2..b00a07b 100644 --- a/packages/typescript/tests/equations.test.ts +++ b/packages/typescript/tests/equations.test.ts @@ -14,6 +14,7 @@ describe("Calculadora equations", () => { -6, [1, 3, 2], false, + "pt-BR", ); // Substitua 'expectedResult' pelo resultado que você espera de getRufinhoDevice expect(result.value).toEqual([1, 3, 2]); @@ -78,4 +79,19 @@ describe("Calculadora equations", () => { expect(root).toBeCloseTo(expectedRoots[index]); }); }); + + test("should correctly calculate the roots of a cubic equation using the metodoDeNewton method with the locale return correct", () => { + const equationRoots = Mathematics.cubicEquation( + 1, + -6, + 3, + -6, + true, + "pt-BR", + ); + + const expectedRootsMsg = "It has only 1 real root in X = 5,6572"; + + expect(expectedRootsMsg).toBe(equationRoots.msg); + }); });