La documentazione per questo modulo può essere creata in Modulo:Formatnum it/man
--[[ Mentre la magic word Formatnum applica una formattazione generica, questo modulo applica una formattazione "italiana", ossia: virgola come separatore decimale, punto delle migliaia e possibilità di inserire un simbolo per l'unità di misura e la sintassi finanziaria per i numeri negativi ]]-- local p = {} local getArgs = require('Module:Arguments').getArgs local function separatore_migliaia(amount, symbol) local formatted = amount local k = 0 symbol = symbol or '.' repeat formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1' .. symbol .. '%2') until k == 0 return formatted end local function round(num, idp) local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end local function formatNum(amount, decimal, suffix, neg_prefix) decimal = decimal or 2 -- i decimali di default sono 2 neg_prefix = neg_prefix or "-" -- il simbolo di default è il meno local famount = math.abs(round(amount,decimal)) famount = math.floor(famount) -- Aggiungo il separatore delle migliaia (i.e. ".") local formatted = separatore_migliaia(famount) -- metto in coda i decimali col loro separatore (i.e. ",") if (decimal > 0) then local remain = round(math.abs(amount) - famount, decimal) remain = string.sub(tostring(remain),3) formatted = formatted .. "," .. remain .. string.rep("0", decimal - string.len(remain)) end -- metto in coda l'eventuale suffisso (e.g '€') formatted = formatted .. (suffix or "") -- formatto come richiesto l'eventuale numero negativo if (amount<0) then formatted = neg_prefix == "()" and ("(" .. formatted .. ")") or (neg_prefix .. formatted) end return formatted end function p.main(frame) local args = getArgs(frame ) local num = tonumber( args[1] or args.num or '' ) local prec = tonumber( args[2] or args.prec ) or 2 local suffix = args.suffix or '' local neg_prefix = args.neg_prefix or '-' return num and formatNum(num, prec, suffix, neg_prefix) or '' end return p