Модуль:Math
Для документации этого модуля может быть создана страница Модуль:Math/Документация
local M={};
function M.rn(i)
local w, t, val, let = {}, {
{1000, "M"},
{900, "CM"},
{500, "D"},
{400, "CD"},
{100, "C"},
{90, "XC"},
{50, "L"},
{40, "XL"},
{10, "X"},
{9, "IX"},
{5, "V"},
{4, "IV"},
{1, "I"}
}
for n, v in ipairs(t) do
val, let = unpack(v)
w[n]=string.rep(let,i/val)
i=i % val
end
return table.concat(w)
end
function M.Roman(frame) -- Преобразует числа от 1 до 4999999 в римские
local N=math.floor(tonumber(frame.args[1]) or error(frame.args[1].." is not a number"));
if N<1 or N>=5e6 then return frame.args[2] or 'N/A' end
local R=N%5000
N=(N-R)/1000
return (N>0 and table.concat{'<span style="text-decoration:overline;">',M.rn(N),'</span>'} or '')..M.rn(R)
end
function M.digitsonly(f)
return (f.args[1]:gsub("[^%d]",''))
end
return M