Conversor de números romanos
Pase de números corrientes a romanos y al revés: 2026 se convierte en MMXXVI, y MMXXVI vuelve a leerse como 2026. Las grafías no estándar se rechazan en lugar de adivinarse, así fechas y apartados quedan bien. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Valor
- 1
- Modo de cálculo
- To roman
- Resultado
- I
- Valor de entrada
- 1
gratis en su navegador
Siete letras y seis pares de resta
Los números romanos usan siete letras: I vale 1, V vale 5, X vale 10, L vale 50, C vale 100, D vale 500 y M vale 1000. Seis pares colocan una letra menor delante de una mayor para restarla: IV es 4, IX es 9, XL es 40, XC es 90, CD es 400 y CM es 900. Para escribir un número, el conversor toma el mayor de esos trece valores que todavía cabe, escribe su símbolo, lo resta y repite hasta que no queda nada. Así 2026 se convierte en MMXXVI, y por eso el resultado es siempre la forma estándar más corta.
Dónde siguen apareciendo
Marcan los años de publicación y de las películas en los créditos, en placas y en portadas, y numeran apartados y cláusulas como I, II, III en esquemas y contratos. Leerlos de vuelta como cifras ayuda a ordenar referencias antiguas. No existe numeral para el cero, y el valor más alto que pueden escribir los símbolos clásicos es 3999, MMMCMXCIX. Al leer, cualquier grafía que no sea la forma estándar, como IIII o IC, se rechaza en lugar de adivinarse, para que un descuido al teclear nunca se convierta en silencio en un número equivocado.
Tratamiento de la entrada y el rango 1..3999
No hay cero ni un numeral para él, y 3999 (MMMCMXCIX) es el mayor valor expresable con los símbolos clásicos. La respuesta reproduce la cadena de entrada normalizada y el resultado convertido.
Qué puede hacer con ella
Años de copyright y de edición
Represente los años de publicación o de una película como números romanos (p. ej., 2026 a MMXXVI) para créditos, láminas y portadas.
Numeración de esquemas y cláusulas
Genere marcadores de sección al estilo I, II, III, o analice referencias heredadas numeradas en romano de vuelta a enteros para ordenarlas.
Preguntas frecuentes
¿Qué rango de números se admite?
Enteros de 1 a 3999 inclusive. No hay numeral para el cero y 3999 (MMMCMXCIX) es el mayor valor clásico.
¿Por qué el 4 se escribe IV y no IIII?
Porque el conversor siempre escribe la forma estándar más corta, con pares de resta en los que una letra menor colocada delante de una mayor se resta. Así resultan IV para 4, IX para 9, XL para 40 y CM para 900.
¿Existe un número romano para el cero?
No. Los números romanos no tienen símbolo para el cero, así que el valor más pequeño que puede convertir es 1. El cero, los negativos y las fracciones quedan fuera del rango y se rechazan.
¿Puedo escribir el número romano en minúsculas?
Sí. El texto se pasa a mayúsculas antes de leerlo, de modo que mmxxvi y MMXXVI dan el mismo resultado. Lo que importa es la grafía: una forma que no es estándar, como IIII, se rechaza.
¿Cómo se lee un número romano para pasarlo a cifras?
De izquierda a derecha: primero se busca un par de resta de dos letras, como CM o IX, y si no lo hay, una sola letra; después se suman los valores. Resulta útil para ordenar referencias antiguas numeradas I, II, III.
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/dev/roman \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"to_roman","value":"2026"}'const res = await fetch("https://api.kit.forhosting.com/dev/roman", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mode": "to_roman",
"value": "2026"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/roman",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mode": "to_roman",
"value": "2026"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/roman", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mode":"to_roman","value":"2026"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mode":"to_roman","value":"2026"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/roman", 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
{
"mode": "to_roman",
"value": "2026"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.roman",
"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 | 1 |
max | 3999 |
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
Convierte entre enteros arábigos (1 a 3999) y números romanos en dos direcciones. mode=to_roman convierte un número en su cadena romana; mode=to_arabic analiza una cadena romana de vuelta a un número y rechaza cualquier grafía no canónica.
Conversión sustractiva voraz
Este esquema voraz es la razón por la que la salida es siempre la forma estándar más corta con la notación sustractiva correcta en lugar de la repetición aditiva. Ambas direcciones usan una única tabla de valores ordenada de trece pares de símbolos: M=1000, CM=900, D=500, CD=400, C=100, XC=90, L=50, XL=40, X=10, IX=9, V=5, IV=4, I=1. mode=to_roman recorre esa tabla de mayor a menor, añadiendo cada símbolo mientras el valor restante sea al menos su peso y restándolo a medida que avanza, de modo que 2026 se convierte en MMXXVI y 4 en IV en lugar de IIII. mode=to_arabic recorre la cadena de izquierda a derecha, buscando primero un par sustractivo de dos caracteres (como CM o IX) antes de recurrir a un solo símbolo, y suma los pesos.
Tratamiento de la entrada y el rango 1..3999
El campo value se documenta como una cadena, pero to_roman también acepta un entero simple o una cadena de solo dígitos, que coacciona con Number antes de comprobar que es un entero dentro de 1..3999; cualquier valor fuera de ese rango inclusive lanza invalid_input. Para to_arabic el value debe ser una cadena; primero se pasa a mayúsculas, de modo que las mayúsculas y minúsculas mezcladas como "mmxxvi" se aceptan, y luego se filtra para que solo puedan aparecer las letras M, D, C, L, X, V e I.
Validación canónica estricta al analizar
Esa comprobación de ida y vuelta rechaza las cadenas mal formadas pero sumables como IIII, VV o IC, que los analizadores ingenuos aceptarían sin más, porque solo la única grafía canónica sobrevive a la recodificación. to_arabic hace algo más que sumar símbolos: tras analizar, vuelve a codificar el número con to_roman y exige que el resultado sea exactamente igual a la entrada en mayúsculas, y también confirma que el valor analizado cae en 1..3999. Cualquier carácter extraño, una cadena vacía o un valor fuera de rango lanza un error invalid_input tipado en lugar de un fallo sin tipo.
Casos de integración
Validación de numerales introducidos por el usuario
Use to_arabic para aceptar una cadena romana solo si está escrita en forma canónica estricta, rechazando IIII o IC.
Preguntas técnicas
¿Acepta la entrada romana en minúsculas?
Sí. to_arabic pasa primero la cadena a mayúsculas, de modo que "mmxxvi" se trata igual que "MMXXVI".
¿Aceptará IIII o IC?
No. Tras analizar, vuelve a codificar el número y exige una coincidencia exacta, de modo que solo la única grafía canónica es válida; las formas no estándar lanzan invalid_input.
¿Puedo pasar el número como una cadena?
Para to_roman, sí: una cadena de solo dígitos como "1990" se coacciona a un número. to_arabic espera una cadena de letras romanas.
¿Es gratuito y cuánto cuesta la API?
El widget del navegador es gratuito; la API usa saldo prepago de KIT desde $0.002, y las tareas fallidas no se cobran.