Mixed: ' + toMixed(r[0], r[1]) + ' | Decimal: ' + (r[0] / r[1]).toFixed(6) + '
'; stepsEl.innerHTML = html; showBtn('c1export'); } function clearFraction() { ['c1aN','c1aD','c1bN','c1bD'].forEach(function(id) { document.getElementById(id).value = ''; }); document.getElementById('c1resultDisplay').innerHTML = '??'; document.getElementById('c1steps').className = 'frac-hidden'; hideBtn('c1export'); state.c1 = null; } function exportFraction() { if (!state.c1) return; var s = state.c1; var opDisplay = s.op === '*' ? '\u00d7' : (s.op === '/' ? '\u00f7' : s.op); exportPdf('Fraction Calculator Result', [ ['Expression', s.aN + '/' + s.aD + ' ' + opDisplay + ' ' + s.bN + '/' + s.bD], ['Result (Fraction)', formatFrac(s.r[0], s.r[1])], ['Result (Mixed)', toMixed(s.r[0], s.r[1])], ['Result (Decimal)', (s.r[0] / s.r[1]).toFixed(6)] ], s.steps); } // 2. Mixed Numbers function calcMixed() { hide('c2error'); hide('c2result'); var a = parseMixed(val('c2a')), b = parseMixed(val('c2b')); if (!a || !b) { show('c2error', 'Enter valid mixed numbers (e.g. "2 3/4" or "3/5")'); document.getElementById('c2error').classList.remove('frac-hidden'); return; } var op = opVal('c2op'); var r = calcOp(a[0], a[1], b[0], b[1], op); var text = toMixed(r[0], r[1]) + ' = ' + formatFrac(r[0], r[1]) + ' = ' + (r[0] / r[1]).toFixed(6); var opDisplay = op === '*' ? '\u00d7' : (op === '/' ? '\u00f7' : op); state.c2 = { a: val('c2a'), b: val('c2b'), op: opDisplay, result: text }; show('c2result', text); showBtn('c2export'); } function clearMixed() { ['c2a','c2b'].forEach(function(id){document.getElementById(id).value='';}); hide('c2result'); hide('c2error'); hideBtn('c2export'); state.c2=null; } function exportMixed() { if (!state.c2) return; var s=state.c2; exportPdf('Mixed Numbers Calculator Result',[['Expression',s.a+' '+s.op+' '+s.b],['Result',s.result]]); } // 3. Simplify function calcSimplify() { var w = parseInt(val('c3w')) || 0, n = parseInt(val('c3n')) || 0, d = parseInt(val('c3d')) || 1; if (d === 0) return; var totalNum = w * d + (w < 0 ? -Math.abs(n) : n); var s = simplify(totalNum, d); var g = gcd(Math.abs(totalNum), Math.abs(d)); var text = formatFrac(s[0], s[1]) + ' (Mixed: ' + toMixed(s[0], s[1]) + ') GCD: ' + g; state.c3 = { input: (w||0) + ' ' + n + '/' + d, result: text }; show('c3result', text); showBtn('c3export'); } function clearSimplify() { ['c3w','c3n','c3d'].forEach(function(id){document.getElementById(id).value='';}); hide('c3result'); hideBtn('c3export'); state.c3=null; } function exportSimplify() { if(!state.c3)return; exportPdf('Simplify Fraction Result',[['Input',state.c3.input],['Simplified',state.c3.result]]); } // 4. Decimal to Fraction function calcDecToFrac() { var d = parseFloat(val('c4dec')); if (isNaN(d)) return; var f = decToFrac(d); var text = formatFrac(f[0], f[1]) + ' (Mixed: ' + toMixed(f[0], f[1]) + ')'; state.c4 = { decimal: val('c4dec'), result: text }; show('c4result', text); showBtn('c4export'); } function clearDecToFrac() { document.getElementById('c4dec').value=''; hide('c4result'); hideBtn('c4export'); state.c4=null; } function exportDecToFrac() { if(!state.c4)return; exportPdf('Decimal to Fraction Result',[['Decimal',state.c4.decimal],['Fraction',state.c4.result]]); } // 5. Fraction to Decimal function calcFracToDec() { var w = parseInt(val('c5w')) || 0, n = parseInt(val('c5n')) || 0, d = parseInt(val('c5d')) || 1; if (d === 0) return; var totalNum = w * d + (w < 0 ? -Math.abs(n) : n); var text = (totalNum / d).toString(); state.c5 = { input: (w||0) + ' ' + n + '/' + d, result: text }; show('c5result', text); showBtn('c5export'); } function clearFracToDec() { ['c5w','c5n','c5d'].forEach(function(id){document.getElementById(id).value='';}); hide('c5result'); hideBtn('c5export'); state.c5=null; } function exportFracToDec() { if(!state.c5)return; exportPdf('Fraction to Decimal Result',[['Fraction',state.c5.input],['Decimal',state.c5.result]]); } // 6. Big Number function calcBig() { var aN = parseInt(val('c6aN')) || 0, aD = parseInt(val('c6aD')) || 1; var bN = parseInt(val('c6bN')) || 0, bD = parseInt(val('c6bD')) || 1; if (aD === 0 || bD === 0) return; var op = opVal('c6op'); var r = calcOp(aN, aD, bN, bD, op); var opDisplay = op === '*' ? '\u00d7' : (op === '/' ? '\u00f7' : op); var text = formatFrac(r[0], r[1]) + ' (Mixed: ' + toMixed(r[0], r[1]) + ') Decimal: ' + (r[0] / r[1]).toFixed(10); state.c6 = { expr: aN + '/' + aD + ' ' + opDisplay + ' ' + bN + '/' + bD, result: text }; show('c6result', text); showBtn('c6export'); } function clearBig() { ['c6aN','c6aD','c6bN','c6bD'].forEach(function(id){document.getElementById(id).value='';}); hide('c6result'); hideBtn('c6export'); state.c6=null; } function exportBig() { if(!state.c6)return; exportPdf('Big Number Fraction Result',[['Expression',state.c6.expr],['Result',state.c6.result]]); }