Las fracciones representan partes de una unidad y permiten trabajar con proporciones exactas. En programación ayudan a modelar repartos, razones, escalas, porcentajes y cálculos que no siempre conviene reducir a decimales.
Una fracción expresa una relación entre dos números enteros: un numerador y un denominador. El numerador indica cuántas partes tomamos y el denominador indica en cuántas partes iguales se divide la unidad.
En programación muchas veces usamos decimales, pero las fracciones siguen siendo importantes porque permiten razonar con exactitud sobre repartos, proporciones y simplificaciones.
En este tema representaremos fracciones en JavaScript usando objetos con dos propiedades: numerador y denominador.
Una fracción se escribe como a/b, donde a es el numerador y b es el denominador. El denominador no puede ser cero.
| Elemento | Significado | Ejemplo en 3/4 |
|---|---|---|
| Numerador | Partes que se toman | 3 |
| Denominador | Partes iguales en que se divide la unidad | 4 |
const fraccion = {
numerador: 3,
denominador: 4
};
console.log(fraccion);
Una fracción puede convertirse a decimal dividiendo numerador por denominador. Algunas fracciones producen decimales exactos y otras producen decimales periódicos o aproximados.
const unMedio = 1 / 2;
const unTercio = 1 / 3;
const tresCuartos = 3 / 4;
console.log(unMedio);
console.log(unTercio);
console.log(tresCuartos);
El decimal puede ser útil para calcular, pero la fracción conserva mejor la relación exacta entre las partes.
Dos fracciones son equivalentes si representan la misma cantidad, aunque tengan numeradores y denominadores diferentes.
Podemos comprobarlo comparando sus valores decimales.
console.log(1 / 2);
console.log(2 / 4);
console.log(3 / 6);
console.log(4 / 8);
Simplificar una fracción significa dividir numerador y denominador por el mismo número para obtener una fracción equivalente más simple. Para hacerlo de forma óptima usamos el máximo común divisor.
function mcd(a, b) {
a = Math.abs(a);
b = Math.abs(b);
while (b !== 0) {
const resto = a % b;
a = b;
b = resto;
}
return a;
}
function simplificar(fraccion) {
const divisor = mcd(fraccion.numerador, fraccion.denominador);
return {
numerador: fraccion.numerador / divisor,
denominador: fraccion.denominador / divisor
};
}
console.log(simplificar({ numerador: 18, denominador: 24 }));
Una fracción no puede tener denominador cero. Además, para este curso trabajaremos con numerador y denominador enteros.
function esFraccionValida(fraccion) {
return Number.isInteger(fraccion.numerador) &&
Number.isInteger(fraccion.denominador) &&
fraccion.denominador !== 0;
}
console.log(esFraccionValida({ numerador: 3, denominador: 4 }));
console.log(esFraccionValida({ numerador: 3, denominador: 0 }));
console.log(esFraccionValida({ numerador: 1.5, denominador: 2 }));
Validar antes de calcular evita errores y resultados sin sentido.
Si dos fracciones tienen el mismo denominador, se suman los numeradores y se conserva el denominador.
const fraccionA = { numerador: 1, denominador: 5 };
const fraccionB = { numerador: 2, denominador: 5 };
const resultado = {
numerador: fraccionA.numerador + fraccionB.numerador,
denominador: fraccionA.denominador
};
console.log(resultado);
Si los denominadores son distintos, podemos usar un denominador común. Una forma directa es multiplicar los denominadores.
function sumar(fraccionA, fraccionB) {
return {
numerador: fraccionA.numerador * fraccionB.denominador +
fraccionB.numerador * fraccionA.denominador,
denominador: fraccionA.denominador * fraccionB.denominador
};
}
console.log(sumar(
{ numerador: 1, denominador: 2 },
{ numerador: 1, denominador: 3 }
));
El resultado puede simplificarse después para obtener una fracción más reducida.
La resta de fracciones sigue una regla similar a la suma, pero restando los productos cruzados.
function restar(fraccionA, fraccionB) {
return {
numerador: fraccionA.numerador * fraccionB.denominador -
fraccionB.numerador * fraccionA.denominador,
denominador: fraccionA.denominador * fraccionB.denominador
};
}
console.log(restar(
{ numerador: 3, denominador: 4 },
{ numerador: 1, denominador: 2 }
));
Para multiplicar fracciones, multiplicamos numeradores entre sí y denominadores entre sí.
function multiplicar(fraccionA, fraccionB) {
return {
numerador: fraccionA.numerador * fraccionB.numerador,
denominador: fraccionA.denominador * fraccionB.denominador
};
}
console.log(multiplicar(
{ numerador: 2, denominador: 3 },
{ numerador: 4, denominador: 5 }
));
Esta regla es más directa que la suma y la resta porque no requiere denominador común previo.
Para dividir fracciones, multiplicamos la primera por la inversa de la segunda. La inversa se obtiene intercambiando numerador y denominador.
function dividir(fraccionA, fraccionB) {
return {
numerador: fraccionA.numerador * fraccionB.denominador,
denominador: fraccionA.denominador * fraccionB.numerador
};
}
console.log(dividir(
{ numerador: 3, denominador: 4 },
{ numerador: 2, denominador: 5 }
));
Al dividir, la segunda fracción no puede tener numerador cero, porque eso produciría una división por cero.
Podemos combinar las operaciones con la función de simplificación para obtener resultados más claros.
function mcd(a, b) {
a = Math.abs(a);
b = Math.abs(b);
while (b !== 0) {
const resto = a % b;
a = b;
b = resto;
}
return a;
}
function simplificar(fraccion) {
const divisor = mcd(fraccion.numerador, fraccion.denominador);
return {
numerador: fraccion.numerador / divisor,
denominador: fraccion.denominador / divisor
};
}
function sumar(fraccionA, fraccionB) {
return simplificar({
numerador: fraccionA.numerador * fraccionB.denominador +
fraccionB.numerador * fraccionA.denominador,
denominador: fraccionA.denominador * fraccionB.denominador
});
}
console.log(sumar(
{ numerador: 1, denominador: 2 },
{ numerador: 1, denominador: 4 }
));
Las fracciones son útiles cuando queremos expresar una proporción sin perder precisión. Por ejemplo, si 2 de cada 5 usuarios completan una acción, podemos representar la proporción como 2/5.
const proporcion = { numerador: 2, denominador: 5 };
const usuarios = 100;
const usuariosQueCompletan = usuarios * proporcion.numerador / proporcion.denominador;
console.log(usuariosQueCompletan);
El cálculo usa la fracción como regla para obtener una parte del total.
const correcto = {
numerador: 1 * 3 + 1 * 2,
denominador: 2 * 3
};
const incorrecto = {
numerador: 1 + 1,
denominador: 2 + 3
};
console.log(correcto);
console.log(incorrecto);
Las fracciones permiten representar partes y proporciones de forma precisa. En programación pueden modelarse con estructuras simples y manipularse mediante funciones claras para validar, simplificar y operar.
En el próximo tema estudiaremos números decimales y precisión numérica, un punto clave cuando las fracciones se transforman en valores decimales dentro de la computadora.