Modul:Formattal
Udseende
![]() | Dette Lua-modul bruges på ca. 8.500 sider, og derfor vil ændringer blive bemærket af mange. Vær venlig at afprøve enhver ændring i modulets /sandkasse eller /test-undersider, eller i din egen module sandkasse. Du bør også overveje at diskutere ændringer på diskussionssiden før du implementerer dem. |
Utilstrækkelig vejledning Dette modul bør have en (bedre) vejledning, helst med eksempler på anvendelse. Hvis andre moduler er nyere og/eller bedre, bør der henvises til dem. |
Brug
{{#invoke:Formattal|function_name}}
local p = {}
local fejlkategori = "[[Kategori:Sider med tal hvis format ikke kendes af formattal]]"
--[[
Formaterer et tal på dansk. Uanset om tallet fra start er uden tusinsadskillere eller bruger punktum eller komma,
formateres det med punktummer som tusindsadskillere. Tallet må højst have 2 decimaler.
Eksempler:
123456 og 123,456 og 123.456 bliver til 123.456 (opfattes som et 6-cifret heltal)
123,45 og 123.45 bliver til 123,45 (opfattes som et 3 cifret tal med 2 decimaler)
123.456.7 giver fejl for ukendt format (tusindadskiller og decimaltegn er ens)
123.456,789 giver fejl for ukendt format (bruger forskellige tusindadskillere)
Mellemrum og HTML-kommentarer i tallet ignores, andre tegn vil fejl.
Ved fejl returnes tallet uændret sammen med en placering i en fejlkategori.
]]
function p.formattal (frame)
local input = (frame.args[1] or "")
input = string.gsub(input, "<!%-%-.-%-%->", "") -- Fjern HTML-kommentarer
local tusindadskiller, output
local heltal, decimaladskiller, decimaler = input:match("^%s*(.-)([,%.])(%d%d?)%s*$")
if decimaladskiller then
if decimaladskiller == "." then
heltal = string.gsub(heltal, "[,]", "") -- Fjern kommaer
else
heltal = string.gsub(heltal, "[%.]", "") -- Fjern punktummer
end
else
local antal
heltal, antal = string.gsub(input, ",", "") -- Fjern kommaer
if antal == 0 then
heltal = string.gsub(input, "%.", "") -- Ingen kommaer, fjern punktummer i stedet
end
end
heltal = string.gsub(heltal, "%s", "") -- Fjern mellemrum
if string.match(heltal, "%D") then
return input .. fejlkategori
end
local antal = 1
while antal ~= 0 do
heltal, antal = string.gsub(heltal, "^(%d+)(%d%d%d)", '%1.%2')
end
if decimaler then
heltal = heltal .. "," .. decimaler
end
return heltal
end
return p