Skill: fractions-multiply-divide
Fraction Multiply & Divide Calculator
Enter two fractions and see cancel-first steps, the straight-across product or the keep-change-flip division, and the simplified answer.
Fraction multiply & divide calculator
Remember
Multiply straight across (cancel first). Divide with keep-change-flip — flip the second fraction only.
/* == PURE (tested by test_tool.js) == */
function tXFracGcd(a, b){ a = Math.abs(a); b = Math.abs(b); while (b){ var t = a % b; a = b; b = t; } return a; }
function tXSimp(n, d){ var g = tXFracGcd(n, d); return { n: n / g, d: d / g }; }
function tMultFracs(n1, d1, n2, d2){
n1 = Math.round(n1); d1 = Math.round(d1); n2 = Math.round(n2); d2 = Math.round(d2);
if (d1 <= 0 || d2 <= 0) return { ok: false, err: 'Denominators must be positive.' };
var g1 = tXFracGcd(n1, d2), g2 = tXFracGcd(n2, d1);
var s = tXSimp(n1 * n2, d1 * d2);
return { ok: true, n1: n1, d1: d1, n2: n2, d2: d2,
cancel1: g1, cancel2: g2, sn: s.n, sd: s.d,
rawN: n1 * n2, rawD: d1 * d2 };
}
function tDivFracs(n1, d1, n2, d2){
n1 = Math.round(n1); d1 = Math.round(d1); n2 = Math.round(n2); d2 = Math.round(d2);
if (d1 <= 0 || d2 <= 0 || n2 === 0) return { ok: false, err: 'Need positive denominators and a nonzero divisor.' };
var s = tXSimp(n1 * d2, d1 * n2);
return { ok: true, n1: n1, d1: d1, n2: n2, d2: d2,
flipped: { n: d2, d: n2 }, sn: s.n, sd: s.d,
rawN: n1 * d2, rawD: d1 * n2 };
}
/* == /PURE == */
/* == PURE (tested by test_tool.js) == */ function tXFracGcd(a, b){ a = Math.abs(a); b = Math.abs(b); while (b){ var t = a % b; a = b; b = t; } return a; } function tXSimp(n, d){ var g = tXFracGcd(n, d); return { n: n / g, d: d / g }; } function tMultFracs(n1, d1, n2, d2){ n1 = Math.round(n1); d1 = Math.round(d1); n2 = Math.round(n2); d2 = Math.round(d2); if (d1 <= 0 || d2 <= 0) return { ok: false, err: 'Denominators must be positive.' }; var g1 = tXFracGcd(n1, d2), g2 = tXFracGcd(n2, d1); var s = tXSimp(n1 * n2, d1 * d2); return { ok: true, n1: n1, d1: d1, n2: n2, d2: d2, cancel1: g1, cancel2: g2, sn: s.n, sd: s.d, rawN: n1 * n2, rawD: d1 * d2 }; } function tDivFracs(n1, d1, n2, d2){ n1 = Math.round(n1); d1 = Math.round(d1); n2 = Math.round(n2); d2 = Math.round(d2); if (d1 <= 0 || d2 <= 0 || n2 === 0) return { ok: false, err: 'Need positive denominators and a nonzero divisor.' }; var s = tXSimp(n1 * d2, d1 * n2); return { ok: true, n1: n1, d1: d1, n2: n2, d2: d2, flipped: { n: d2, d: n2 }, sn: s.n, sd: s.d, rawN: n1 * d2, rawD: d1 * n2 }; } /* == /PURE == */
(function(){ 'use strict'; function $(id){ return document.getElementById(id); } function render(){ var n1 = parseInt($('inN1').value, 10), d1 = parseInt($('inD1').value, 10); var n2 = parseInt($('inN2').value, 10), d2 = parseInt($('inD2').value, 10); var op = $('opSel').value; var out = $('toolOut'); var r = op === '*' ? tMultFracs(n1, d1, n2, d2) : tDivFracs(n1, d1, n2, d2); if (!r.ok){ out.innerHTML = '
' + r.err + '
'; return; } var h = '
- ';
if (op === '*'){
if (r.cancel1 > 1) h += '
- Cancel ' + r.cancel1 + ': ' + n1 + ' with ' + d2 + '.
- Cancel ' + r.cancel2 + ': ' + n2 + ' with ' + d1 + '.
- Multiply straight across: ' + r.rawN + '/' + r.rawD + '.
- Keep ' + n1 + '/' + d1 + ', change ÷ to ×, flip ' + n2 + '/' + d2 + ' to ' + r.flipped.n + '/' + r.flipped.d + '.
- Multiply straight across: ' + r.rawN + '/' + r.rawD + '.
- Simplest form: ' + r.sn + '/' + r.sd + '.
'; if (r.cancel2 > 1) h += '
'; h += '
'; } else { h += '
'; h += '
'; } h += '
'; out.innerHTML = h; } $('calcBtn').addEventListener('click', render); render(); })();