Modulo:Formatnum it
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