Fractions are fundamental mathematical concepts representing a part of a whole. They consist of two numbers: a numerator and a denominator, separated by a fraction line.
Numerator: The number above the line, indicating how many parts of the whole are being considered.
Denominator: The number below the line, indicating the total number of equal parts the whole is divided into. The denominator cannot be zero.
Core Operations:
Our calculator handles the four basic arithmetic operations for fractions:
Addition/Subtraction:
To add or subtract fractions, they must have a common denominator. If they don't, you find the least common multiple (LCM) of the denominators. Then, you adjust the numerators accordingly. The operation is then performed on the numerators, and the common denominator is kept.
Multiplying fractions is straightforward: multiply the numerators together and multiply the denominators together. Simplifying before or after multiplication is often recommended.
To divide fractions, you multiply the first fraction by the reciprocal of the second fraction. The reciprocal of a fraction is obtained by flipping it (swapping the numerator and denominator).
A fraction is in its simplest form (or reduced form) when its numerator and denominator have no common factors other than 1. This is achieved by dividing both the numerator and the denominator by their greatest common divisor (GCD).
Example: \( \frac{4}{6} \)
The GCD of 4 and 6 is 2.
\( \frac{4 \div 2}{6 \div 2} = \frac{2}{3} \)
When to Use This Calculator:
This calculator is useful for:
Students learning basic arithmetic and fraction manipulation.
Anyone needing to quickly perform calculations involving fractions in everyday tasks (e.g., cooking, DIY projects, budgeting).
Verifying manual calculations.
Exploring mathematical concepts related to rational numbers.
// Helper function to get integer values from input fields
function getInputValue(id) {
var value = document.getElementById(id).value;
if (value === "") return NaN; // Return NaN if input is empty
return parseInt(value, 10);
}
// Helper function to display result or error
function displayResult(resultNum, resultDen) {
var resultDiv = document.getElementById("calculationResult");
var errorDiv = document.getElementById("errorMessage");
errorDiv.textContent = ""; // Clear previous errors
if (isNaN(resultNum) || isNaN(resultDen)) {
resultDiv.textContent = "–";
errorDiv.textContent = "Invalid input. Please enter whole numbers.";
return false;
}
if (resultDen === 0) {
resultDiv.textContent = "–";
errorDiv.textContent = "Error: Denominator cannot be zero.";
return false;
}
// Format as fraction, handle whole numbers
if (resultDen === 1) {
resultDiv.textContent = resultNum;
} else if (resultDen === -1) {
resultDiv.textContent = -resultNum; // Handle case like 5 / -1
} else if (resultNum === 0) {
resultDiv.textContent = "0";
}
else {
resultDiv.textContent = resultNum + " / " + resultDen;
}
return true;
}
// Helper function for GCD (Euclidean algorithm)
function gcd(a, b) {
a = Math.abs(a);
b = Math.abs(b);
while (b) {
var t = b;
b = a % b;
a = t;
}
return a;
}
// Helper function to simplify a fraction
function simplifyFractionInternal(numerator, denominator) {
if (denominator === 0) return { num: NaN, den: NaN }; // Error case
if (numerator === 0) return { num: 0, den: 1 }; // Zero numerator simplifies to 0/1
var commonDivisor = gcd(numerator, denominator);
var simplifiedNum = numerator / commonDivisor;
var simplifiedDen = denominator / commonDivisor;
// Ensure the denominator is positive
if (simplifiedDen < 0) {
simplifiedNum = -simplifiedNum;
simplifiedDen = -simplifiedDen;
}
return { num: simplifiedNum, den: simplifiedDen };
}
// Function to simplify the currently displayed result
function simplifyFraction() {
var currentResultText = document.getElementById("calculationResult").textContent;
if (currentResultText === "–" || currentResultText.includes("Error")) {
document.getElementById("errorMessage").textContent = "No valid result to simplify.";
return;
}
var parts = currentResultText.split(" / ");
var num, den;
if (parts.length === 2) {
num = parseInt(parts[0], 10);
den = parseInt(parts[1], 10);
} else { // Likely a whole number
num = parseInt(currentResultText, 10);
den = 1;
}
if (isNaN(num) || isNaN(den)) {
document.getElementById("errorMessage").textContent = "Could not parse current result for simplification.";
return;
}
var simplified = simplifyFractionInternal(num, den);
displayResult(simplified.num, simplified.den);
}
// Function to reset the calculator
function resetCalculator() {
document.getElementById("fraction1Numerator").value = "";
document.getElementById("fraction1Denominator").value = "";
document.getElementById("fraction2Numerator").value = "";
document.getElementById("fraction2Denominator").value = "";
document.getElementById("calculationResult").textContent = "–";
document.getElementById("errorMessage").textContent = "";
}
// — Operation Functions —
function addFractions() {
var num1 = getInputValue("fraction1Numerator");
var den1 = getInputValue("fraction1Denominator");
var num2 = getInputValue("fraction2Numerator");
var den2 = getInputValue("fraction2Denominator");
if (isNaN(num1) || isNaN(den1) || isNaN(num2) || isNaN(den2)) {
displayResult(NaN, NaN);
return;
}
if (den1 === 0 || den2 === 0) {
displayResult(NaN, 0); // Specific error for zero denominator
return;
}
// Common denominator calculation
var commonDen = den1 * den2;
// Adjust numerators
var adjustedNum1 = num1 * den2;
var adjustedNum2 = num2 * den1;
// Add numerators
var resultNum = adjustedNum1 + adjustedNum2;
var resultDen = commonDen;
var simplified = simplifyFractionInternal(resultNum, resultDen);
displayResult(simplified.num, simplified.den);
}
function subtractFractions() {
var num1 = getInputValue("fraction1Numerator");
var den1 = getInputValue("fraction1Denominator");
var num2 = getInputValue("fraction2Numerator");
var den2 = getInputValue("fraction2Denominator");
if (isNaN(num1) || isNaN(den1) || isNaN(num2) || isNaN(den2)) {
displayResult(NaN, NaN);
return;
}
if (den1 === 0 || den2 === 0) {
displayResult(NaN, 0); // Specific error for zero denominator
return;
}
// Common denominator calculation
var commonDen = den1 * den2;
// Adjust numerators
var adjustedNum1 = num1 * den2;
var adjustedNum2 = num2 * den1;
// Subtract numerators
var resultNum = adjustedNum1 – adjustedNum2;
var resultDen = commonDen;
var simplified = simplifyFractionInternal(resultNum, resultDen);
displayResult(simplified.num, simplified.den);
}
function multiplyFractions() {
var num1 = getInputValue("fraction1Numerator");
var den1 = getInputValue("fraction1Denominator");
var num2 = getInputValue("fraction2Numerator");
var den2 = getInputValue("fraction2Denominator");
if (isNaN(num1) || isNaN(den1) || isNaN(num2) || isNaN(den2)) {
displayResult(NaN, NaN);
return;
}
if (den1 === 0 || den2 === 0) {
displayResult(NaN, 0); // Specific error for zero denominator
return;
}
// Multiply numerators and denominators
var resultNum = num1 * num2;
var resultDen = den1 * den2;
var simplified = simplifyFractionInternal(resultNum, resultDen);
displayResult(simplified.num, simplified.den);
}
function divideFractions() {
var num1 = getInputValue("fraction1Numerator");
var den1 = getInputValue("fraction1Denominator");
var num2 = getInputValue("fraction2Numerator");
var den2 = getInputValue("fraction2Denominator");
if (isNaN(num1) || isNaN(den1) || isNaN(num2) || isNaN(den2)) {
displayResult(NaN, NaN);
return;
}
if (den1 === 0 || den2 === 0) {
displayResult(NaN, 0); // Specific error for zero denominator
return;
}
// Specific check for division by zero fraction (numerator is 0)
if (num2 === 0) {
document.getElementById("errorMessage").textContent = "Error: Cannot divide by zero.";
document.getElementById("calculationResult").textContent = "–";
return;
}
// Multiply by the reciprocal of the second fraction
var resultNum = num1 * den2;
var resultDen = den1 * num2;
var simplified = simplifyFractionInternal(resultNum, resultDen);
displayResult(simplified.num, simplified.den);
}