diff --git a/package/Functions/DecimalToFraction b/package/Functions/DecimalToFraction new file mode 100644 index 0000000..d93364d --- /dev/null +++ b/package/Functions/DecimalToFraction @@ -0,0 +1,46 @@ +/** + * Converts a decimal number to fraction. + * @param {number} decimalValue The decimal number to convert to fraction. + * @param {number} precision. (e.g., 0.001 for three decimal places). + * @returns {string} The fraction in the form "numerator/denominator" or (p/q). + */ +function decimalToFraction(decimalValue, precision = 1e-6) { + if (Math.abs(decimalValue) < precision) { + return '0/1'; //for special case zero + } + + let sign = ''; + if (decimalValue < 0) { + sign = '-'; + decimalValue = Math.abs(decimalValue); + } + + let wholePart = Math.floor(decimalValue); + let decimalPart = decimalValue - wholePart; + let numerator = 1; + let denominator = 1; + let previousDenominator = 0; + let currentDenominator = 1; + let tempNumerator; + + while (Math.abs(decimalPart - wholePart) > precision * decimalPart) { + decimalPart = 1 / (decimalPart - wholePart); + tempNumerator = numerator; + numerator = wholePart * numerator + previousDenominator; + previousDenominator = currentDenominator; + currentDenominator = wholePart * currentDenominator + tempNumerator; + wholePart = Math.floor(decimalPart); + } + + numerator = sign + (numerator + wholePart * currentDenominator); + denominator = currentDenominator; + + return `${numerator}/${denominator}`; +} + +// Example: +//const decimal = 0.625; +//const fraction = decimalToFraction(decimal); +// Output: "5/8" + +module.exports = { decimalToFraction }; diff --git a/package/index.js b/package/index.js index 0115141..4546a14 100644 --- a/package/index.js +++ b/package/index.js @@ -179,6 +179,7 @@ function doPower(base, exponent) { return Math.pow(base, exponent); } +function { decimalToFunction } = require("./Functions/DecimalToFraction"); // Export functions module.exports = { doAdd, @@ -213,4 +214,6 @@ module.exports = { doPower, calculatesin, cToF, + + decimalToFraction, };