Módulo:Números/pruebas
[crear]
Documentación del módulo
local z = {}
function z.Romano(frame)
local numero,argumentos,parent
local NumerosRomanosMenores4000 = {
{3000, "MMM"},{2000, "MM"},{1000, "M"},
{900, "CM"}, {800, "DCCC"}, {700, "DCC"}, {600, "DC"}, {500, "D"}, {400, "CD"},
{300, "CCC"}, {200, "CC"}, {100, "C"},
{90, "XC"},{80, "LXXX"},{70, "LXX"},{60, "LX"}, {50, "L"}, {40, "XL"},
{30, "XXX"},{20, "XX"},{10, "X"},
{9, "IX"}, {8, "VIII"},{7, "VII"},{6, "VI"}, {5, "V"}, {4, "IV"},
{3, "III"},{2, "II"}, {1, "I"}
}
if type(frame) == 'number' then -- Para poder llamarlo desde otro módulo fácilmente
numero = frame
else
argumentos = frame.args;
parent = frame:getParent();
numero = tonumber(argumentos[1] or parent.args[1]) --Número decimal que se quiere convertir a numeración romana
end
if numero == nil or numero == "" or numero >= 4000 then return "" end
local resultado = ''
for _, v in ipairs( NumerosRomanosMenores4000 ) do
local valor, letras = unpack( v )
if numero >= valor then
numero = numero - valor
resultado = resultado .. letras
end
end
return resultado
end
function z.Arabico(frame)
local str
if type(frame) == 'string' then -- Para poder llamarlo desde otro módulo fácilmente
str = frame
else
argumentos = frame.args;
parent = frame:getParent();
str = (argumentos[1] or parent.args[1]) --Número decimal que se quiere convertir a numeración romana
end
local strOrig = str
str = str:upper()
if not str:find( '^[MDCLXVI]+$' ) then
return tonumber( str ) or strOrig
end
local smallRomans = { ['I'] = 1, ['V'] = 5, ['X'] = 10, ['L'] = 50, ['C'] = 100, ['D'] = 500, ['M'] = 1000 }
local result = 0
local old, n = 0
for i = str:len(), 1, -1 do
n = smallRomans[ str:sub( i, i ) ]
if n < old then
result = result - n
else
result = result + n
old = n
end
end
return result
end
return z