Calculadora de precios unitarios
Un frasco de 32 onzas a 5,99 gana a uno de 16 onzas a 3,49 en cuanto se divide cada precio entre su tamaño: sale más barato por onza. Escriba precios y tamaños en una misma unidad y verá marcada la mejor compra. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Una calculadora de comparación de precios unitarios convierte los precios de estantería y los tamaños de los envases en una clasificación justa por unidad, para que pueda ver qué producto resulta realmente más barato. Introduzca dos o más productos con un precio total y un tamaño de envase en la misma unidad —onzas, mililitros, gramos o unidades— y la herramienta devuelve el precio dividido entre el tamaño en cada línea, señala el mejor valor como el precio unitario más bajo y muestra la aritmética paso a paso en la que puede confiar en un deber, una aplicación de compras o una hoja de cálculo de compras corporativas.
Qué significa el precio unitario cuando los envases difieren
El precio unitario es el precio total de estantería dividido entre la cantidad que realmente recibe: onzas en un tarro, mililitros en una botella, gramos en una bolsa o piezas en un paquete múltiple. Cuando la marca A cuesta tres dólares cuarenta y nueve por dieciséis onzas y la marca B cuesta cinco dólares noventa y nueve por treinta y dos onzas, comparar solo los totales de estantería engaña: un tarro es más pequeño.
Dividir cada precio entre su tamaño ofrece un denominador común para clasificar el coste real por onza, por mililitro o por hoja. El mejor valor es el producto con el precio unitario más bajo, no necesariamente el de menor etiqueta ni el de mayor envase. Comprar a granel suele salir más barato por unidad, pero no siempre: una oferta en un paquete pequeño puede superar al formato de club mayorista, y los paquetes múltiples a veces esconden una tarifa unitaria mayor que la unidad suelta.
Esta calculadora no convierte unidades por usted —si un producto está en onzas líquidas y otro en litros, convierta primero a una sola unidad— ni aplica impuestos, cupones, cuotas de socio ni descuentos de fidelidad. Solo aplica la aritmética que ya usa a mano: precio unitario igual a precio entre tamaño, y luego elegir el mínimo. Profesores de matemáticas de consumo, asesores de presupuesto y gestores de producto que publican widgets de «¿cuál es más barato?»
necesitan ese mismo contrato determinista: mismas entradas, mismos precios unitarios, misma marca de mejor valor, en cualquier entorno. Los tamaños cero y negativos son errores duros porque la división entre cero no está definida y un tamaño de envase negativo no es una cantidad física en este modelo.
Consejos prácticos, límites y búsquedas relacionadas
Use la misma unidad de tamaño para todos los productos de una misma llamada: mezclar onzas con mililitros sin convertir no se corregirá por usted y producirá una clasificación sin sentido. Es preferible enviar números en lugar de cadenas con formato de moneda; las cadenas numéricas solo se aceptan cuando cumplen un patrón numérico finito estricto, sin signos de dólar ni comas. Mantenga el price no negativo —las muestras gratis a precio cero están permitidas y dan un precio unitario cero—, mientras que el size debe permanecer estrictamente positivo.
Esta página apunta a quienes buscan una calculadora de comparación de precios unitarios, una herramienta de precio por unidad o un comprobador del mejor valor según el tamaño del envase; no es un rastreador de supermercados en vivo, ni un conversor multidivisa, ni un optimizador de cupones. Prefiera esta capacidad cuando ya conoce el precio de estantería y el tamaño del envase y solo necesita el precio unitario más la selección del mejor valor; si su fuente es una foto de un recibo, extraiga primero esos números.
Qué puede hacer con ella
Comprobación del mejor valor en el pasillo del súper
Los compradores introducen dos o más precios de estantería y tamaños de envase y compran la opción con el precio unitario más bajo en lugar del precio de etiqueta más bajo.
Deberes y fichas de matemáticas de consumo
Los estudiantes comparan paquetes múltiples frente a unidades sueltas y verifican los precios unitarios escritos a mano y las elecciones de mejor valor contra un resultado determinista.
Preguntas frecuentes
¿Cómo se calcula el precio unitario?
El mejor valor es el producto con el precio unitario más bajo cuando todos los tamaños usan la misma unidad.
¿Qué ocurre si el tamaño del envase es cero o negativo?
Un tamaño cero o negativo no puede definir un precio unitario con sentido, así que la petición se rechaza y no se cobra.
¿Cuántos productos puedo comparar?
Cada producto necesita un precio no negativo y un tamaño estrictamente positivo.
¿Es gratis la calculadora de comparación de precios unitarios?
La herramienta del navegador es gratuita y se ejecuta en local.
¿El envase más grande es siempre el más barato?
No. El tamaño grande suele salir mejor por unidad, pero una oferta en un envase pequeño puede superarlo, y algunos packs múltiples esconden un precio por unidad más alto que el producto suelto. Solo el precio unitario lo decide.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/life/unit-price \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"products":[{"name":"Brand A 16 oz","price":3.49,"size":16},{"name":"Brand B 32 oz","price":5.99,"size":32}]}'const res = await fetch("https://api.kit.forhosting.com/life/unit-price", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"products": [
{
"name": "Brand A 16 oz",
"price": 3.49,
"size": 16
},
{
"name": "Brand B 32 oz",
"price": 5.99,
"size": 32
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/unit-price",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"products": [
{
"name": "Brand A 16 oz",
"price": 3.49,
"size": 16
},
{
"name": "Brand B 32 oz",
"price": 5.99,
"size": 32
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/unit-price", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"products":[{"name":"Brand A 16 oz","price":3.49,"size":16},{"name":"Brand B 32 oz","price":5.99,"size":32}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"products":[{"name":"Brand A 16 oz","price":3.49,"size":16},{"name":"Brand B 32 oz","price":5.99,"size":32}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/unit-price", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"products": [
{
"name": "Brand A 16 oz",
"price": 3.49,
"size": 16
},
{
"name": "Brand B 32 oz",
"price": 5.99,
"size": 32
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.unit_price",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
min_products | 2 |
max_products | 50 |
max_abs | 1000000000000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Los tamaños de envase cero o negativos se rechazan con invalid_input en lugar de inventar un infinito o una ganga absurda. El proceso es aritmética puramente determinista —sin red, sin rastreador de tiendas, sin semilla aleatoria, sin dependencia del reloj—, de modo que el ejecutor gratuito del navegador y la API de prepago devuelven el mismo JSON tras el redondeo decimal fijo cada vez que se llama.
Cómo llamar a la API y qué devuelve
También puede enviar los arrays paralelos prices y sizes de igual longitud, con names o labels opcionales. Envíe un cuerpo JSON con un campo obligatorio: products (alias items, options, list), un array de al menos dos y como máximo cincuenta objetos. Cada objeto necesita un price finito no negativo (alias cost, amount) y un size estrictamente positivo (alias quantity, qty, units, package_size). El name opcional (alias label, title) etiqueta la línea en la respuesta; si se omite, la herramienta usa Product 1, Product 2, y así sucesivamente. Los valores absolutos de price y size deben mantenerse por debajo de un billón para que los cocientes intermedios sigan siendo finitos en doble precisión IEEE tanto en el Worker como en el navegador. En caso de éxito, la respuesta fija count al número de productos comparados, products a un array de objetos cada uno con index, name, price y size redondeados, unit_price e is_best_value, best_index al primer índice con el precio unitario más bajo, best_name, best_unit_price, best_price y best_size a los campos de ese ganador, savings_vs_worst_per_unit a la diferencia entre el precio unitario más alto y el más bajo, formula a la cadena unit_price igual a price entre size, message a un breve resumen en inglés y steps a un array ordenado de líneas de sustitución. Una validación fallida —falta products, menos de dos elementos, números no finitos, valores fuera de los límites absolutos o cualquier size cero o negativo— devuelve invalid_input y nunca se cobra. El precio es una tarifa plana de $0.002 por petición correcta con artículo unitario y precio unitario marginal cero.
Consejos prácticos, límites y búsquedas relacionadas
Al enseñar, combine ejemplos: tres punto cuatro nueve por dieciséis onzas frente a cinco punto nueve nueve por treinta y dos onzas muestra el paquete grande ganando en precio unitario; una oferta que baja el paquete pequeño por debajo de la tarifa unitaria a granel muestra cómo cambia el mejor valor; dos productos con precios unitarios idénticos producen un empate documentado con ambos is_best_value en true y best_index apuntando al primero; y un size cero o negativo demuestra la ruta dura de invalid_input. Las tareas fallidas que devuelven invalid_input no consumen saldo de prepago, lo que mantiene baratos los scripts de exploración cuando los estudiantes ponen size a cero a propósito. Las comprobaciones de ida y vuelta son fáciles: recalcule a mano cada price dividido entre size y confirme que coincide con el unit_price publicado dentro del mismo redondeo a doce decimales, y confirme que el producto con el unit_price mínimo es el único marcado como mejor valor salvo que haya un empate real.
Casos de integración
Pruebas unitarias de compras y catálogos
Los equipos evalúan en lote pares de precio de SKU y tamaño de paquete y comprueban los campos best_index y unit_price en pruebas de interfaz de caja o catálogo.
Preguntas técnicas
¿Qué pasa si dos productos tienen el mismo precio unitario?
Ambos se marcan con is_best_value en true. best_index apunta al primer producto que alcanzó el precio unitario mínimo.