12. Razones y proporciones

Las razones comparan cantidades y las proporciones indican igualdad entre razones. Son herramientas esenciales para escalas, porcentajes, gráficos, diseños responsivos, conversiones y reglas de negocio.

12.1 Introducción

Una razón permite comparar dos cantidades. Por ejemplo, si hay 2 errores cada 100 líneas de código, podemos expresar esa relación como 2:100, 2/100 o 0.02.

Una proporción aparece cuando dos razones son equivalentes. Esto permite ampliar, reducir, convertir y mantener relaciones constantes entre valores.

En programación, razones y proporciones aparecen al escalar imágenes, calcular porcentajes, convertir unidades, distribuir espacios, interpretar estadísticas y mantener relaciones entre dimensiones.

12.2 Qué es una razón

Una razón compara dos cantidades mediante una división. Si tenemos 3 aciertos y 5 intentos, la razón de aciertos respecto de intentos es 3/5.

razón = cantidadA / cantidadB
const aciertos = 3;
const intentos = 5;
const razon = aciertos / intentos;

console.log(razon);

El resultado indica qué parte de los intentos terminó en acierto.

12.3 Formas de escribir una razón

Una razón puede escribirse con dos puntos, como fracción o como decimal. Todas estas formas expresan la misma comparación.

Forma Ejemplo Lectura
Dos puntos 3:5 3 a 5
Fracción 3/5 3 dividido 5
Decimal 0.6 Sesenta centésimos
Porcentaje 60% 60 de cada 100
const razon = 3 / 5;
const porcentaje = razon * 100;

console.log(razon);
console.log(porcentaje);

12.4 Razones equivalentes

Dos razones son equivalentes si representan la misma relación. Por ejemplo, 2/4, 3/6 y 5/10 equivalen a 1/2.

console.log(2 / 4);
console.log(3 / 6);
console.log(5 / 10);
console.log(1 / 2);

Aunque los números cambian, la relación entre ellos se mantiene.

12.5 Qué es una proporción

Una proporción es una igualdad entre dos razones.

a/b = c/d

Por ejemplo, 2/4 = 3/6. Ambas razones valen 0.5.

const razonA = 2 / 4;
const razonB = 3 / 6;

console.log(razonA);
console.log(razonB);
console.log(razonA === razonB);

12.6 Comprobar una proporción con productos cruzados

Para comprobar si a/b = c/d, podemos multiplicar cruzado. Si a × d es igual a b × c, entonces hay proporción.

2/4 = 3/6 porque 2 × 6 = 4 × 3
function sonProporcionales(a, b, c, d) {
  return a * d === b * c;
}

console.log(sonProporcionales(2, 4, 3, 6));
console.log(sonProporcionales(2, 5, 3, 6));

Esta forma evita algunos problemas de comparación con decimales, porque trabaja con enteros cuando los valores de entrada son enteros.

12.7 Escalas

Una escala indica cómo se transforma una medida manteniendo una proporción. Si una imagen de 800 por 600 píxeles se reduce a la mitad, ambas dimensiones se multiplican por 0.5.

const anchoOriginal = 800;
const altoOriginal = 600;
const escala = 0.5;

const nuevoAncho = anchoOriginal * escala;
const nuevoAlto = altoOriginal * escala;

console.log(nuevoAncho);
console.log(nuevoAlto);

Como ambas dimensiones se transforman con el mismo factor, la imagen mantiene su proporción.

12.8 Mantener la proporción de una imagen

Si conocemos el ancho original, el alto original y un nuevo ancho, podemos calcular el nuevo alto manteniendo la misma relación.

nuevoAlto = nuevoAncho × altoOriginal / anchoOriginal
const anchoOriginal = 1920;
const altoOriginal = 1080;
const nuevoAncho = 640;

const nuevoAlto = nuevoAncho * altoOriginal / anchoOriginal;

console.log(nuevoAlto);

Este cálculo es común en diseño web, edición de imágenes, video y gráficos.

12.9 Proporción directa

Dos cantidades son directamente proporcionales cuando al aumentar una, la otra aumenta en la misma relación. Por ejemplo, si un producto cuesta 250, dos productos cuestan 500 y tres cuestan 750.

const precioUnitario = 250;

for (let cantidad = 1; cantidad <= 5; cantidad++) {
  console.log(cantidad * precioUnitario);
}

El total aumenta de forma proporcional a la cantidad.

12.10 Proporción inversa

Dos cantidades son inversamente proporcionales cuando al aumentar una, la otra disminuye. Por ejemplo, si una tarea requiere una cantidad fija de trabajo, más personas pueden reducir el tiempo necesario.

personas × tiempo = trabajo constante
const trabajo = 24;

for (let personas = 1; personas <= 6; personas++) {
  const horas = trabajo / personas;
  console.log(horas);
}

Este modelo es una simplificación. En problemas reales puede haber límites, coordinación y otros factores.

12.11 Aplicación: tasa de conversión

Una tasa de conversión compara la cantidad de acciones logradas contra la cantidad total de oportunidades. Es una razón muy usada en sistemas web y análisis de datos.

const visitas = 1200;
const compras = 84;
const tasa = compras / visitas;

console.log(tasa);
console.log((tasa * 100).toFixed(2));

El primer resultado es la razón decimal. El segundo la muestra como porcentaje con dos decimales.

12.12 Aplicación: repartir espacio

Las proporciones también sirven para distribuir espacio. Por ejemplo, una interfaz puede repartir un ancho total en columnas con relación 2:1.

const anchoTotal = 900;
const parteIzquierda = 2;
const parteDerecha = 1;
const partesTotales = parteIzquierda + parteDerecha;

const anchoIzquierdo = anchoTotal * parteIzquierda / partesTotales;
const anchoDerecho = anchoTotal * parteDerecha / partesTotales;

console.log(anchoIzquierdo);
console.log(anchoDerecho);

Esta idea se relaciona con grillas, layouts, barras de progreso y distribución visual.

12.13 Aplicación: normalizar valores

Normalizar un valor significa convertirlo a una escala común. Por ejemplo, transformar un puntaje de 0 a 80 en una escala de 0 a 100.

valorNormalizado = valor / máximoOriginal × nuevoMáximo
const puntaje = 64;
const maximoOriginal = 80;
const nuevoMaximo = 100;

const normalizado = puntaje / maximoOriginal * nuevoMaximo;

console.log(normalizado);

La normalización aparece en análisis de datos, gráficos, juegos y modelos de aprendizaje automático.

12.14 Errores comunes

  • Confundir una razón con una resta. Comparar 8 y 4 como razón no es lo mismo que calcular 8 - 4.
  • Dividir por cero al calcular una razón.
  • Comparar proporciones con decimales sin considerar tolerancias.
  • Escalar solo una dimensión de una imagen y deformarla.
  • Aplicar proporción directa cuando el problema realmente es inverso.
function calcularRazon(a, b) {
  if (b === 0) {
    return "No se puede dividir por cero";
  }

  return a / b;
}

console.log(calcularRazon(8, 4));
console.log(calcularRazon(8, 0));

12.15 Qué debes recordar de este tema

  • Una razón compara dos cantidades mediante una división.
  • Una proporción es una igualdad entre dos razones.
  • Los productos cruzados permiten comprobar proporciones.
  • Las escalas mantienen relaciones entre medidas.
  • La proporción directa aumenta o disminuye en la misma relación.
  • La proporción inversa hace que una cantidad disminuya cuando la otra aumenta.
  • Razones y proporciones aparecen en gráficos, porcentajes, diseño, datos y reglas de negocio.

12.16 Conclusión

Las razones y proporciones permiten comparar cantidades y mantener relaciones constantes. En programación son especialmente útiles para transformar valores, escalar elementos, distribuir espacios y calcular indicadores.

En el próximo tema estudiaremos porcentajes y variaciones porcentuales, que son una aplicación directa de razones sobre 100.