Calcule macros en gramos desde calorías y porcentajes
Esta calculadora de reparto de macronutrientes convierte un objetivo calórico diario y tres porcentajes en metas prácticas de gramos de proteínas, carbohidratos y grasas.
Ejecutar — gratis
Emplea los factores energéticos estándar: cuatro calorías por gramo de proteína, cuatro por gramo de carbohidratos y nueve por gramo de grasa. La calculadora valida cada dato y rechaza cualquier reparto cuyos porcentajes no sumen 100. Así resulta útil para planes nutricionales, procesos de asesoramiento, hojas de planificación de comidas o aplicaciones deportivas que necesitan un resultado claro y repetible, sin ajustes silenciosos.
Introduzca un objetivo completo basado en calorías
Comience con la cantidad total de calorías prevista para un día e indique después qué proporción corresponde a proteínas, carbohidratos y grasas. Cada valor representa un porcentaje de la energía, no del peso de los alimentos ni una cantidad de gramos. Por ejemplo, un objetivo de 30 por ciento de proteínas significa que esa parte del presupuesto calórico diario procede de las proteínas. Los cuatro datos son obligatorios para que el cálculo sea explícito y reproducible. Las calorías deben ser un número finito mayor que cero. Cada porcentaje debe ser un número finito entre cero y 100, ambos incluidos; por ello, un plan puede asignar deliberadamente cero a un macronutriente, pero no admite proporciones negativas o imposibles. Escriba números sin signos de porcentaje ni unidades. La respuesta repite las calorías aceptadas y devuelve el reparto completo junto con los gramos calculados, lo que permite registrar exactamente qué supuestos originaron el resultado. Esta capacidad no determina qué objetivo calórico o proporción conviene a una persona: únicamente realiza la operación con los valores que usted ya haya elegido.
Comprenda la conversión de calorías a gramos
El cálculo asigna primero las calorías diarias a cada macronutriente. Multiplica el total por el porcentaje correspondiente y divide el resultado entre 100. Después convierte la energía asignada en gramos mediante cuatro kilocalorías por gramo de proteína, cuatro por gramo de carbohidratos y nueve por gramo de grasa. Considere 2,000 calorías con una distribución de 30 por ciento de proteínas, 40 por ciento de carbohidratos y 30 por ciento de grasas. Las proteínas reciben 600 calorías, equivalentes a 150 gramos; los carbohidratos reciben 800 calorías, equivalentes a 200 gramos; y las grasas reciben 600 calorías, aproximadamente 66.666667 gramos, porque aportan más energía por gramo. Los resultados se redondean a un máximo de seis decimales para eliminar artefactos de coma flotante sin perder precisión útil. El algoritmo no usa red, aleatoriedad, estado almacenado ni la hora actual. La misma entrada JSON siempre genera la misma salida JSON, lo que facilita pruebas, hojas de cálculo y automatizaciones fiables.
Corrija el total porcentual antes del cálculo
Los porcentajes de proteínas, carbohidratos y grasas deben sumar 100 porque juntos describen todo el presupuesto calórico. Si suman 95, queda un cinco por ciento sin destino; si suman 110, el plan asigna más energía de la indicada. En lugar de normalizar o modificar esos datos sin avisar, la capacidad devuelve un error de entrada no válida que explica que los porcentajes deben sumar 100. Este comportamiento estricto revela errores de captura y evita resultados con apariencia fiable basados en supuestos que usted no aprobó. Solo se emplea una tolerancia diminuta para representar números de coma flotante, nunca para aceptar repartos materialmente incompletos. Ante un error, revise los tres porcentajes en vez de cambiar las calorías, pues la regla afecta a la proporción. Una respuesta correcta agrupa los porcentajes originales y los gramos resultantes para que el sistema posterior pueda mostrarlos juntos. Considere los gramos como objetivos de planificación, no como mediciones clínicas: las etiquetas, recetas, redondeos, fibra, alcohol y necesidades individuales requieren tratamiento en el proceso nutricional que rodea este cálculo.
Qué puede hacer con ella
Prepare un objetivo diario de comidas
Convierta un objetivo calórico y una proporción ya definidos en metas de gramos para orientar recetas y porciones.
Valide cálculos de asesoramiento
Compruebe que el reparto propuesto esté completo antes de guardar los objetivos de una persona atendida.
Impulse una aplicación deportiva
Genere gramos de macronutrientes deterministas sin duplicar reglas de conversión entre clientes y servicios.
Preguntas frecuentes
¿Deben sumar 100 los porcentajes?
Sí. El cálculo devuelve un error de entrada no válida cuando proteínas, carbohidratos y grasas no suman 100.
¿Cómo se convierten las calorías en gramos?
Las calorías de proteínas y carbohidratos se dividen entre cuatro; las calorías de grasas, entre nueve.
¿Puede asignarse cero por ciento a un macronutriente?
Sí. Cada porcentaje puede estar entre cero y 100 si la suma de los tres sigue siendo 100.
¿La calculadora recomienda una proporción?
No. Calcula gramos con los valores que usted proporciona y no ofrece asesoramiento médico ni dietético.
¿Cuánto cuesta una solicitud API?
El precio base publicado es $0.002 por solicitud. La experiencia del navegador puede usar el mismo cálculo determinista.
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/calc2/macro-split-calculate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"calories":2000,"protein_percent":30,"carb_percent":40,"fat_percent":30}'const res = await fetch("https://api.kit.forhosting.com/calc2/macro-split-calculate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"calories": 2000,
"protein_percent": 30,
"carb_percent": 40,
"fat_percent": 30
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/calc2/macro-split-calculate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"calories": 2000,
"protein_percent": 30,
"carb_percent": 40,
"fat_percent": 30
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/calc2/macro-split-calculate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"calories":2000,"protein_percent":30,"carb_percent":40,"fat_percent":30}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"calories":2000,"protein_percent":30,"carb_percent":40,"fat_percent":30}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/calc2/macro-split-calculate", 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
{
"calories": 2000,
"protein_percent": 30,
"carb_percent": 40,
"fat_percent": 30
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "calc2.macro_split_calculate",
"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.
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. |