35. Matemática financiera básica para programación

Los programas financieros necesitan calcular precios, descuentos, impuestos, intereses, cuotas y saldos con precisión. La matemática financiera básica ayuda a modelar esas reglas correctamente.

35.1 Introducción

Muchas aplicaciones trabajan con dinero: tiendas online, sistemas de facturación, billeteras digitales, bancos, presupuestos, suscripciones y reportes contables.

Estos cálculos parecen simples, pero requieren cuidado: porcentajes, redondeos, impuestos, descuentos, cuotas, intereses y precisión numérica pueden afectar el resultado final.

Este tema presenta conceptos básicos para programar cálculos financieros simples con JavaScript.

35.2 Capital, monto e interés

El capital es el dinero inicial. El interés es el dinero adicional generado o cobrado por el uso del capital. El monto es el capital más los intereses.

monto = capital + interés
const capital = 10000;
const interes = 1500;
const monto = capital + interes;

console.log(monto);

35.3 Porcentaje aplicado a dinero

Muchos cálculos financieros usan porcentajes. Para calcular un porcentaje de un importe, multiplicamos por el porcentaje dividido por 100.

porcentajeAplicado = importe × porcentaje / 100
const importe = 5000;
const porcentaje = 12;
const resultado = importe * porcentaje / 100;

console.log(resultado);

35.4 Descuentos

Un descuento reduce el precio original. Primero calculamos el monto del descuento y luego lo restamos.

const precio = 12000;
const descuento = 15;

const montoDescuento = precio * descuento / 100;
const precioFinal = precio - montoDescuento;

console.log(montoDescuento);
console.log(precioFinal);

También podemos usar un factor: descontar 15% equivale a multiplicar por 0.85.

35.5 Impuestos y recargos

Un impuesto o recargo aumenta el importe base. Se calcula como porcentaje del subtotal.

const subtotal = 10000;
const impuesto = 21;

const montoImpuesto = subtotal * impuesto / 100;
const total = subtotal + montoImpuesto;

console.log(montoImpuesto);
console.log(total);

En sistemas reales, el orden de aplicación de descuentos e impuestos puede depender de reglas legales o comerciales.

35.6 Precio final con descuento e impuesto

Un cálculo frecuente combina descuento e impuesto. Conviene separarlo en pasos para evitar errores.

function calcularPrecioFinal(precio, descuento, impuesto) {
  const precioConDescuento = precio - precio * descuento / 100;
  const total = precioConDescuento + precioConDescuento * impuesto / 100;

  return total;
}

console.log(calcularPrecioFinal(10000, 10, 21));

35.7 Cuotas simples

Si dividimos un total en cuotas iguales sin interés, cada cuota se calcula dividiendo el total por la cantidad de cuotas.

const total = 24000;
const cuotas = 6;
const valorCuota = total / cuotas;

console.log(valorCuota);

Si el resultado tiene decimales, hay que decidir cómo redondear y cómo ajustar diferencias.

35.8 Cuotas con recargo

Si una compra en cuotas tiene recargo, primero calculamos el total con recargo y luego lo dividimos por la cantidad de cuotas.

const precio = 30000;
const recargo = 18;
const cuotas = 12;

const totalConRecargo = precio + precio * recargo / 100;
const valorCuota = totalConRecargo / cuotas;

console.log(totalConRecargo);
console.log(valorCuota);

35.9 Trabajar con centavos

Para evitar muchos problemas de precisión decimal, es común guardar importes en centavos como enteros.

const precioCentavos = 1999;
const cantidad = 3;
const totalCentavos = precioCentavos * cantidad;

console.log(totalCentavos);
console.log((totalCentavos / 100).toFixed(2));

Esta técnica es útil para sumas, restas y multiplicaciones simples.

35.10 Formatear dinero

Para mostrar importes al usuario, conviene usar formato monetario. Intl.NumberFormat permite adaptar separadores y moneda.

const importe = 123456.78;

const formato = new Intl.NumberFormat("es-AR", {
  style: "currency",
  currency: "ARS"
});

console.log(formato.format(importe));

El formato afecta la presentación, no cambia el valor usado para calcular.

35.11 Flujo de caja básico

Un flujo de caja registra entradas y salidas de dinero. El saldo se obtiene sumando ingresos y restando egresos.

const movimientos = [5000, -1200, -800, 3000, -600];
const saldo = movimientos.reduce((total, movimiento) => total + movimiento, 0);

console.log(saldo);

Los valores positivos representan ingresos y los negativos egresos.

35.12 Margen de ganancia

El margen compara la ganancia con el precio de venta. Es una razón expresada como porcentaje.

margen = (precioVenta - costo) / precioVenta × 100
const costo = 7000;
const precioVenta = 10000;
const margen = (precioVenta - costo) / precioVenta * 100;

console.log(margen);

35.13 Punto de equilibrio simple

El punto de equilibrio indica cuántas unidades hay que vender para cubrir un costo fijo.

unidades = costoFijo / gananciaPorUnidad
const costoFijo = 50000;
const precioVenta = 3000;
const costoUnitario = 1800;
const gananciaPorUnidad = precioVenta - costoUnitario;

const unidades = Math.ceil(costoFijo / gananciaPorUnidad);

console.log(unidades);

Usamos Math.ceil() porque no podemos vender una fracción de unidad si el producto es indivisible.

35.14 Errores comunes

  • Usar porcentajes sin dividir por 100.
  • Aplicar descuentos e impuestos en un orden incorrecto para la regla del negocio.
  • Ignorar redondeos cuando se reparten importes en cuotas.
  • Usar decimales directamente en cálculos monetarios sensibles.
  • Confundir margen con recargo sobre costo.
  • No validar cantidades, cuotas o tasas negativas cuando no corresponden.
const precio = 1000;
const descuento = 10;

const incorrecto = precio - precio * descuento;
const correcto = precio - precio * descuento / 100;

console.log(incorrecto);
console.log(correcto);

35.15 Qué debes recordar de este tema

  • El capital es el importe inicial y el interés es el adicional generado o cobrado.
  • Los porcentajes financieros se calculan dividiendo por 100.
  • Los descuentos reducen y los impuestos o recargos aumentan un importe.
  • Las cuotas simples dividen un total por la cantidad de períodos.
  • Trabajar con centavos como enteros ayuda a evitar errores decimales.
  • El formato monetario es presentación, no cálculo.
  • Las reglas financieras deben validarse y documentarse con cuidado.

35.16 Conclusión

La matemática financiera básica permite implementar cálculos monetarios cotidianos de forma clara. Al programar, es importante separar reglas, validar datos y manejar el redondeo con criterio.

En el próximo tema estudiaremos interés simple e interés compuesto con más detalle.