<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="da">
	<id>https://www.martinuswiki.dk/da/index.php?action=history&amp;feed=atom&amp;title=Modul%3AFormattal</id>
	<title>Modul:Formattal - Versionshistorie</title>
	<link rel="self" type="application/atom+xml" href="https://www.martinuswiki.dk/da/index.php?action=history&amp;feed=atom&amp;title=Modul%3AFormattal"/>
	<link rel="alternate" type="text/html" href="https://www.martinuswiki.dk/da/index.php?title=Modul:Formattal&amp;action=history"/>
	<updated>2026-08-06T09:31:17Z</updated>
	<subtitle>Versionshistorie for denne side i Martinus Wiki</subtitle>
	<generator>MediaWiki 1.40.2</generator>
	<entry>
		<id>https://www.martinuswiki.dk/da/index.php?title=Modul:Formattal&amp;diff=1880&amp;oldid=prev</id>
		<title>Lasse: 1 version importeret</title>
		<link rel="alternate" type="text/html" href="https://www.martinuswiki.dk/da/index.php?title=Modul:Formattal&amp;diff=1880&amp;oldid=prev"/>
		<updated>2021-01-29T04:32:36Z</updated>

		<summary type="html">&lt;p&gt;1 version importeret&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;da&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Ældre version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versionen fra 29. jan. 2021, 06:32&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key martinuswiki_dk_db-mediawiki:diff::1.12:old-1879:rev-1880 --&gt;
&lt;/table&gt;</summary>
		<author><name>Lasse</name></author>
	</entry>
	<entry>
		<id>https://www.martinuswiki.dk/da/index.php?title=Modul:Formattal&amp;diff=1879&amp;oldid=prev</id>
		<title>MartinusWiki&gt;Jhertel: Så består den alle tests og accepterer ikke længere ugyldige tal (i hvert fald ikke dem, der er med i testsuiten).</title>
		<link rel="alternate" type="text/html" href="https://www.martinuswiki.dk/da/index.php?title=Modul:Formattal&amp;diff=1879&amp;oldid=prev"/>
		<updated>2017-11-30T03:11:46Z</updated>

		<summary type="html">&lt;p&gt;Så består den alle tests og accepterer ikke længere ugyldige tal (i hvert fald ikke dem, der er med i testsuiten).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny side&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
p.angivFejlSynligt = false&lt;br /&gt;
	-- Angiver om fejl skal angives synligt med en rød stjerne efter det &lt;br /&gt;
	-- fejlende tal, med en fejlbeskrivelse som viser sig, når man holder musen&lt;br /&gt;
	-- over stjernen. Nogle mener, at det ikke vil være godt altid at angive&lt;br /&gt;
	-- synlige fejl, da det måske vil kunne forvirre almindelige brugere. &lt;br /&gt;
	-- Derfor kan funktionaliteten slås til og fra her, fx midlertidigt mens&lt;br /&gt;
	-- man fejlsøger sider, der er havnet i kategorien &amp;quot;Sider med tal hvis&lt;br /&gt;
	-- format ikke kendes af formattal&amp;quot;.&lt;br /&gt;
	-- angivFejlSynligt placeres i p for at unittests kan tjekke værdien.&lt;br /&gt;
local fejlkategorikode = &amp;quot;[[Kategori:Sider med tal hvis format ikke kendes af formattal]]&amp;quot;&lt;br /&gt;
	-- Wikikode som altid sættes til sidst i output, hvis der er fejl i tallet.&lt;br /&gt;
	-- Denne kode medtages altid ved fejl, uanset værdien af p.angivFejlSynligt.&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	formattal(frame)&lt;br /&gt;
&lt;br /&gt;
	Formaterer et tal med højst to decimaler på dansk. Det oprindelige tal kan &lt;br /&gt;
	enten bruge punktum som decimaladskiller og komma som tusindadskiller &lt;br /&gt;
	(&amp;quot;123,456,789.12&amp;quot;), eller komma som decimaladskiller og punktum som&lt;br /&gt;
	tusindadskiller (&amp;quot;123.456.789,12&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
	Uanset hvordan tallet var formateret i input, formateres det i output på dansk&lt;br /&gt;
	vis med punktum som tusindadskiller og komma som decimaladskiller.&lt;br /&gt;
&lt;br /&gt;
	Fortegn (&amp;quot;-&amp;quot; eller &amp;quot;+&amp;quot;) håndteres også, og der kan endda være et vilkårligt&lt;br /&gt;
	antal mellemrum mellem fortegnet og resten af tallet, selv om dette er en &lt;br /&gt;
	ukorrekt skrivemåde; dette rettes i output ved at disse mellemrum fjernes.&lt;br /&gt;
&lt;br /&gt;
	Eksempler (se Modul:Formattal/testcases for langt flere eksempler):&lt;br /&gt;
		Opfattes som 6-cifret heltal, da tallet ikke må have mere end to decimaler:&lt;br /&gt;
			formattal(&amp;quot;123456&amp;quot;) = &amp;quot;123.456&amp;quot;&lt;br /&gt;
			formattal(&amp;quot;123,456&amp;quot;) = &amp;quot;123.456&amp;quot; &lt;br /&gt;
			formattal(&amp;quot;123.456&amp;quot;) = &amp;quot;123.456&amp;quot;&lt;br /&gt;
		Opfattes som 5-cifret tal med 2 decimaler:&lt;br /&gt;
			formattal(&amp;quot;123,45) = &amp;quot;123,45&amp;quot;&lt;br /&gt;
			formattal(&amp;quot;123.45&amp;quot;) = &amp;quot;123,45&amp;quot;&lt;br /&gt;
		Giver fejl for ukendt format (tusindadskiller og decimaltegn er ens):&lt;br /&gt;
			formattal(&amp;quot;123.456.7&amp;quot;) = &amp;quot;123.456.7&amp;quot; &lt;br /&gt;
		Giver fejl for ukendt format (bruger forskellige tusindadskillere eller&lt;br /&gt;
		har for mange decimaler):&lt;br /&gt;
			formattal(&amp;quot;123.456,789&amp;quot;) = &amp;quot;123.456,789&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	Alle HTML-kommentarer og visse blanktegn i tallet ignores; andre uvedkommende&lt;br /&gt;
	tegn vil give fejl.&lt;br /&gt;
&lt;br /&gt;
	Ved fejl returneres tallet uændret samtidig med at artiklen placeres i &lt;br /&gt;
	fejlkategorien &amp;quot;Sider med tal hvis format ikke kendes af formattal&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
function p.formattal(frame)&lt;br /&gt;
    local originaltInputEllerTom = (frame.args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	return p.formaterIndledendeTalPaaDansk(&lt;br /&gt;
		originaltInputEllerTom, &lt;br /&gt;
		p.angivFejlSynligt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	p.formaterIndledendeTalPaaDansk()&lt;br /&gt;
	&lt;br /&gt;
	Funktion som indeholder hele kernefunktionaliteten på &amp;quot;ren&amp;quot; form (uden &lt;br /&gt;
	frame.args[1] or &amp;quot;&amp;quot;), for at gøre unittests nemmere.&lt;br /&gt;
]]&lt;br /&gt;
function p.formaterIndledendeTalPaaDansk(originaltInputEllerTom, &lt;br /&gt;
		angivFejlSynligt)&lt;br /&gt;
	&lt;br /&gt;
	-- Fjern HTML-kommentarer og ydre blanktegn.&lt;br /&gt;
    local inputUdenEventuelleHtmlKommentarerOgBlanktegn &lt;br /&gt;
		= p.fjernHtmlkommentarerOgYdreBlanktegn(originaltInputEllerTom)&lt;br /&gt;
&lt;br /&gt;
	-- Opdel i inputtal (fx &amp;quot;-1.234.553,43&amp;quot; eller &amp;quot;&amp;quot;) &lt;br /&gt;
	-- og inputrest (fx &amp;quot;&amp;lt;ref&amp;gt;…&amp;lt;/ref&amp;gt;&amp;quot; eller &amp;quot;&amp;quot;).&lt;br /&gt;
	local inputtalEllerTom, inputrest &lt;br /&gt;
		= p.opdelITalOgRest(inputUdenEventuelleHtmlKommentarerOgBlanktegn)&lt;br /&gt;
&lt;br /&gt;
	-- Fortolk tallet, hvis der er et, og dan det færdige output, inklusive&lt;br /&gt;
	-- eventuelle fejlangivelser. Bemærk at der altid er et gyldigt output,&lt;br /&gt;
	-- også hvis der er fejl.&lt;br /&gt;
	local faerdigtOutput = p.fortolkTalOgDanFaerdigtOutput(inputtalEllerTom, &lt;br /&gt;
		inputrest, angivFejlSynligt)&lt;br /&gt;
	&lt;br /&gt;
	return faerdigtOutput&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.fjernHtmlkommentarerOgYdreBlanktegn(s)&lt;br /&gt;
	&lt;br /&gt;
	-- Fjern HTML-kommentarer.&lt;br /&gt;
    local sUdenEventuelleHtmlKommentarer &lt;br /&gt;
    	= string.gsub(s, &amp;quot;&amp;lt;!%-%-.-%-%-&amp;gt;&amp;quot;, &amp;quot;&amp;quot;) &lt;br /&gt;
    	-- Mon dette mønster virkelig er helt gennemtænkt?&lt;br /&gt;
&lt;br /&gt;
    -- Fjern blanktegn i enderne&lt;br /&gt;
    local sUdenEventuelleHtmlKommentarerOgYdreBlanktegn&lt;br /&gt;
    	= mw.text.trim(sUdenEventuelleHtmlKommentarer)&lt;br /&gt;
    	&lt;br /&gt;
    return sUdenEventuelleHtmlKommentarerOgYdreBlanktegn&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Opdel strengen s i hvad der kan minde om et tal (fx &amp;quot;-1.234.553,43&amp;quot;) og &lt;br /&gt;
	resten (fx &amp;quot;&amp;lt;ref&amp;gt;…&amp;lt;/ref&amp;gt;&amp;quot; eller &amp;quot;&amp;quot;).&lt;br /&gt;
	&lt;br /&gt;
	Bemærk at det &amp;quot;der kan minde om et tal&amp;quot; ikke behøver faktisk være et &lt;br /&gt;
	korrekt tal. Det skal blot matche et simplistisk mønster.&lt;br /&gt;
	&lt;br /&gt;
	Eksempler:&lt;br /&gt;
		&amp;quot;-1.234.553,43&amp;lt;ref&amp;gt;…&amp;lt;/ref&amp;gt;&amp;quot; → &amp;quot;-1.234.553,43&amp;quot;, &amp;quot;&amp;lt;ref&amp;gt;…&amp;lt;/ref&amp;gt;&amp;quot;&lt;br /&gt;
		&amp;quot;-&amp;lt;ref&amp;gt;…&amp;lt;/ref&amp;gt;&amp;quot; → &amp;quot;-&amp;quot;, &amp;quot;&amp;lt;ref&amp;gt;…&amp;lt;/ref&amp;gt;&amp;quot;&lt;br /&gt;
		&amp;quot;.2blabla&amp;quot; → &amp;quot;.2&amp;quot;, &amp;quot;blabla&amp;quot;&lt;br /&gt;
		&amp;quot;..2..,,. blabla&amp;quot; → &amp;quot;..2..,,.&amp;quot;, &amp;quot; blabla&amp;quot;&lt;br /&gt;
		&amp;quot;+..,,..,,. blabla&amp;quot; → &amp;quot;+..,,..,,.&amp;quot;, &amp;quot; blabla&amp;quot;&lt;br /&gt;
		&amp;quot;blabla&amp;quot; → &amp;quot;&amp;quot;, &amp;quot;blabla&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
]]&lt;br /&gt;
function p.opdelITalOgRest(s)&lt;br /&gt;
&lt;br /&gt;
	-- Opdel i tal (fx &amp;quot;-1.234.553,43&amp;quot;) og rest (fx &amp;quot;&amp;lt;ref&amp;gt;…&amp;lt;/ref&amp;gt;&amp;quot; eller &amp;quot;&amp;quot;).&lt;br /&gt;
	-- Mønsteret er designet, så det ikke kan fejle; hverken talEllerTom &lt;br /&gt;
	-- eller rest kan derfor blive nil.&lt;br /&gt;
	local talEllerTom, rest = s:match(&amp;quot;^([+-]? *[%d,.]*)(.*)$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	return talEllerTom, rest &lt;br /&gt;
		-- Ingen af disse kan være nil, men begge kan være tomme.&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	p.fortolkTalOgDanFaerdigtOutput()&lt;br /&gt;
	&lt;br /&gt;
	Fortolk tallet, hvis der er et, og dan det færdige output, inkl. evt. &lt;br /&gt;
	fejlhåndtering. Hvis der ikke er et tal, så returner inputrest uændret.&lt;br /&gt;
	&lt;br /&gt;
	inputtalEllerTom (string, ikke nil)&lt;br /&gt;
	&lt;br /&gt;
		Det tal, der skal fortolkes, eller den tomme streng. Den tomme streng&lt;br /&gt;
		er en gyldig situation, som ikke giver fejl.&lt;br /&gt;
		&lt;br /&gt;
		Kan være et ikke-fortolkbart &amp;quot;tal&amp;quot; a la &amp;quot;23.43.3,34&amp;quot;, i hvilket &lt;br /&gt;
		tilfælde der returneres en fejlkategori (det bør der i hvert fald).&lt;br /&gt;
		Hvis angivFejlSynligt er true angives der også en synlig fejlangivelse&lt;br /&gt;
		med fejlmeddelelse.&lt;br /&gt;
	&lt;br /&gt;
	inputrest (string, ikke nil)&lt;br /&gt;
	&lt;br /&gt;
		Den del af inputtet, der følger efter tallet. Hvis &amp;quot;tallet&amp;quot; er tomt,&lt;br /&gt;
		er inputrest hele inputtet.&lt;br /&gt;
&lt;br /&gt;
	angivFejlSynligt (boolean, ikke nil)&lt;br /&gt;
	&lt;br /&gt;
		Om fejl og fejlbeskrivelse skal angives synligt i output til højre&lt;br /&gt;
		for det fejlende tal. &lt;br /&gt;
]]&lt;br /&gt;
function p.fortolkTalOgDanFaerdigtOutput(&lt;br /&gt;
		inputtalEllerTom, &lt;br /&gt;
		inputrest, &lt;br /&gt;
		angivFejlSynligt)&lt;br /&gt;
	&lt;br /&gt;
	local faerdigtOutput &lt;br /&gt;
&lt;br /&gt;
	if inputtalEllerTom == &amp;quot;&amp;quot; then&lt;br /&gt;
		-- Taldelen er tom.&lt;br /&gt;
		-- Dette er en gyldig situation, hvor output så skal være&lt;br /&gt;
		-- identisk med input. Det antages dog, at det er okay at &lt;br /&gt;
		-- HTML-kommentarer og ydre blanktegn stadig fjernes.&lt;br /&gt;
		-- Jf. https://da.wikipedia.org/wiki/Brugerdiskussion:Jhertel#Modul_formattal_og_tomt_input&lt;br /&gt;
		faerdigtOutput = inputrest  &lt;br /&gt;
			-- inputrest udgør det hele, da inputtalEllerTom er tom.&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		local inputtal = inputtalEllerTom  -- Den kan ikke længere være tom.&lt;br /&gt;
		&lt;br /&gt;
		-- Opdel tallet (inputtal) i enkeltdele.&lt;br /&gt;
		-- Dette kan fejle, og i så fald vil fejltekstEllerNil være ikke-nil og &lt;br /&gt;
		-- indeholde en fejlbeskrivelse.&lt;br /&gt;
	    local eventueltFortegnEllerTom, heltalsdelUdenTusindadskillere, &lt;br /&gt;
	    	decimalerEllerNil, fejltekstEllerNil = p.opdelTal(inputtal)&lt;br /&gt;
	&lt;br /&gt;
		-- Returner output (enten et formateret tal eller fejl).&lt;br /&gt;
		if not fejltekstEllerNil then&lt;br /&gt;
	    	-- Succes. Tallet er fuldt fortolket og opdelt i enkeltdele.&lt;br /&gt;
	    	&lt;br /&gt;
	    	-- Dan et færdigt dansk formateret tal.&lt;br /&gt;
	    	local outputtal&lt;br /&gt;
	    		= p.danDanskOutputtal(&lt;br /&gt;
	    			eventueltFortegnEllerTom, &lt;br /&gt;
					heltalsdelUdenTusindadskillere, &lt;br /&gt;
					decimalerEllerNil) &lt;br /&gt;
	&lt;br /&gt;
			faerdigtOutput = outputtal .. inputrest&lt;br /&gt;
	&lt;br /&gt;
		else&lt;br /&gt;
	    	-- Fejlsituation.&lt;br /&gt;
	    	&lt;br /&gt;
    		-- FejltekstEllerNil kan ikke længere være nil. Angiv dette klart &lt;br /&gt;
    		-- som et værn mod bugs.&lt;br /&gt;
	    	local fejltekst = fejltekstEllerNil &lt;br /&gt;
&lt;br /&gt;
	        faerdigtOutput = p.danSamletFejlreturstreng(&lt;br /&gt;
	        	inputtal, &lt;br /&gt;
	        	inputrest, &lt;br /&gt;
	        	fejltekst, &lt;br /&gt;
	        	angivFejlSynligt)&lt;br /&gt;
&lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return faerdigtOutput&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	p.opdelTal()&lt;br /&gt;
&lt;br /&gt;
	Returnerer fire værdier:&lt;br /&gt;
		eventueltFortegnEllerTom, &lt;br /&gt;
		heltalsdelUdenTusindadskillere, &lt;br /&gt;
		decimalerEllerNil, &lt;br /&gt;
		fejltekstEllerNil.&lt;br /&gt;
&lt;br /&gt;
	Hvis fejltekstEllerNil ikke er nil, gik opdelingen godt, og tallet er &lt;br /&gt;
	accepteret som korrekt. Ellers indeholder fejltekstEllerNil en streng, som &lt;br /&gt;
	beskriver fejlen.&lt;br /&gt;
&lt;br /&gt;
	Returværdien decimalerEllerNil er nil, hvis der ingen decimaler er.&lt;br /&gt;
]]&lt;br /&gt;
function p.opdelTal(inputtal)&lt;br /&gt;
&lt;br /&gt;
	local fejltekstEllerNil = nil&lt;br /&gt;
	local heltalsdelUdenTusindadskillere = nil&lt;br /&gt;
&lt;br /&gt;
    -- Fjern et evt. fortegn på første position og husk det.&lt;br /&gt;
    local eventueltFortegnEllerTom, inputtaldelUdenEventueltFortegn&lt;br /&gt;
    	= p.opsplitIFortegnOgRest(inputtal)&lt;br /&gt;
&lt;br /&gt;
	-- Prøv at matche et kommatal med 1 eller 2 decimaler.&lt;br /&gt;
    local heltalsdelMedEventuelleTusindadskillereEllerNil, &lt;br /&gt;
    	decimaladskillerEllerNil, decimalerEllerNil&lt;br /&gt;
    	= inputtaldelUdenEventueltFortegn:match(&amp;quot;^([%d,.]-)([,.])(%d%d?)$&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	-- Afgør om der var et match.&lt;br /&gt;
	-- Hvis ikke der er et match, vil både heltalsdelEllerNil, &lt;br /&gt;
	-- decimaladskillerEllerNil og decimalerEllerNil være nil.&lt;br /&gt;
	local derVarEtMatch = (heltalsdelMedEventuelleTusindadskillereEllerNil ~= nil)&lt;br /&gt;
&lt;br /&gt;
    if derVarEtMatch then&lt;br /&gt;
    	-- Der var et match: Tallet er et kommatal med 1 eller 2 decimaler.&lt;br /&gt;
    	&lt;br /&gt;
    	-- Nye variable for at indikere, at de ikke længere kan være nil:&lt;br /&gt;
    	-- Værn mod bugs.&lt;br /&gt;
    	local heltalsdelMedEventuelleTusindadskillere&lt;br /&gt;
    		= heltalsdelMedEventuelleTusindadskillereEllerNil&lt;br /&gt;
    	local decimaladskiller = decimaladskillerEllerNil&lt;br /&gt;
&lt;br /&gt;
    	-- Bestemt tusindadskillertegnet.&lt;br /&gt;
    	-- Bemærk at decimaladskiller logisk kun kan være &amp;quot;.&amp;quot; eller &amp;quot;,&amp;quot;&lt;br /&gt;
    	-- pga. mønsteret ovenfor.&lt;br /&gt;
    	local tusindadskiller = p.modsatAdskillertegn(decimaladskiller)&lt;br /&gt;
&lt;br /&gt;
    	-- Fjern alle tusindadskillertegn fra heltalsdel.&lt;br /&gt;
        heltalsdelUdenTusindadskillere, fejltekstEllerNil&lt;br /&gt;
        	= p.fjernTusindadskillere(heltalsdelMedEventuelleTusindadskillere, tusindadskiller)&lt;br /&gt;
&lt;br /&gt;
    else&lt;br /&gt;
    	-- Der var ikke et match. Hvis tallet er på korrekt form, er det et heltal.&lt;br /&gt;
&lt;br /&gt;
	    local heltalsdelMedEventuellePunktumtusindadskillere&lt;br /&gt;
    		= inputtaldelUdenEventueltFortegn:match(&amp;quot;^([%d.]+)$&amp;quot;)&lt;br /&gt;
    	&lt;br /&gt;
    	if heltalsdelMedEventuellePunktumtusindadskillere then&lt;br /&gt;
	    	-- Fjern alle tusindadskillertegn fra heltalsdel.&lt;br /&gt;
	        heltalsdelUdenTusindadskillere, fejltekstEllerNil&lt;br /&gt;
	        	= p.fjernTusindadskillere(heltalsdelMedEventuellePunktumtusindadskillere, &amp;quot;.&amp;quot;)&lt;br /&gt;
    	else&lt;br /&gt;
		    local heltalsdelMedEventuelleKommatusindadskillere&lt;br /&gt;
	    		= inputtaldelUdenEventueltFortegn:match(&amp;quot;^([%d,]+)$&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
			if heltalsdelMedEventuelleKommatusindadskillere then&lt;br /&gt;
		    	-- Fjern alle tusindadskillertegn fra heltalsdel.&lt;br /&gt;
		        heltalsdelUdenTusindadskillere, fejltekstEllerNil&lt;br /&gt;
		        	= p.fjernTusindadskillere(heltalsdelMedEventuelleKommatusindadskillere, &amp;quot;,&amp;quot;)&lt;br /&gt;
			else&lt;br /&gt;
				-- Angiv fejl.&lt;br /&gt;
				heltalsdelUdenTusindadskillere = nil  &lt;br /&gt;
				&lt;br /&gt;
				fejltekstEllerNil = &amp;quot;Kunne ikke fortolke tallet &amp;#039;&amp;quot; .. inputtal .. &amp;quot;&amp;#039;.&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	if not fejltekstEllerNil then&lt;br /&gt;
		-- Håndter situationer som &amp;quot;.12&amp;quot; (= 0,12).&lt;br /&gt;
		if heltalsdelUdenTusindadskillere == &amp;quot;&amp;quot; then&lt;br /&gt;
			heltalsdelUdenTusindadskillere = &amp;quot;0&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		-- Tjek for ugyldige tusindadskillere.&lt;br /&gt;
	    if heltalsdelUdenTusindadskillere:match(&amp;quot;%D&amp;quot;) then&lt;br /&gt;
	    	-- Fejlsituation: Heltalsdelen uden tusindadskillere indeholder&lt;br /&gt;
	    	-- mindst ét ikke-ciffer (%D), som kun kan være en forkert&lt;br /&gt;
	    	-- tusindadskiller.&lt;br /&gt;
	    	fejltekstEllerNil = &amp;quot;Heltalsdelen &amp;#039;&amp;quot; .. heltalsdelUdenTusindadskillere .. &amp;quot;&amp;#039; indeholder ugyldige tusindadskillere; hele tallet er &amp;#039;&amp;quot; .. inputtal .. &amp;quot;&amp;#039;.&amp;quot;&lt;br /&gt;
	    	eventueltFortegnEllerTom = &amp;quot;&amp;quot;&lt;br /&gt;
	    	heltalsdelUdenTusindadskillere = nil&lt;br /&gt;
	    	decimalerEllerNil = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return eventueltFortegnEllerTom, heltalsdelUdenTusindadskillere, decimalerEllerNil, fejltekstEllerNil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returner heltalsdelMedEventuelleTusindadskillere med alle tusindadskillere &lt;br /&gt;
	af den angivne type (&amp;quot;.&amp;quot; eller &amp;quot;,&amp;quot;) fjernet.&lt;br /&gt;
&lt;br /&gt;
	heltalsdelMedEventuelleTusindadskillere:&lt;br /&gt;
		En streng med nul eller flere cifre og tusindadskillere.&lt;br /&gt;
&lt;br /&gt;
	Returværdier:&lt;br /&gt;
		heltalsdelUdenTusindadskillere (string), &lt;br /&gt;
		fejltekstEllerNil (string eller nil)&lt;br /&gt;
	&lt;br /&gt;
	Eksempler på korrekt opførsel, som dog endnu ikke er opnået:&lt;br /&gt;
		&amp;quot;&amp;quot;, &amp;quot;,&amp;quot; → &amp;quot;&amp;quot;, nil&lt;br /&gt;
		&amp;quot;0&amp;quot;, &amp;quot;,&amp;quot; → &amp;quot;0&amp;quot;, nil&lt;br /&gt;
		&amp;quot;12&amp;quot;, &amp;quot;,&amp;quot; → &amp;quot;12&amp;quot;, nil&lt;br /&gt;
		&amp;quot;123&amp;quot;, &amp;quot;,&amp;quot; → &amp;quot;123&amp;quot;, nil&lt;br /&gt;
		&amp;quot;1234&amp;quot;, &amp;quot;,&amp;quot; → &amp;quot;1234&amp;quot;, nil&lt;br /&gt;
		&amp;quot;1,234&amp;quot;, &amp;quot;,&amp;quot; → &amp;quot;1,234&amp;quot;, nil&lt;br /&gt;
		&amp;quot;1,234&amp;quot;, &amp;quot;.&amp;quot; → nil, &amp;quot;Ugyldige tusindadskillere i heltalsdel&amp;quot;&lt;br /&gt;
		&amp;quot;1,234.&amp;quot;, &amp;quot;,&amp;quot; → nil, &amp;quot;Ugyldige tusindadskillere i heltalsdel&amp;quot;&lt;br /&gt;
		&amp;quot;1,234,567&amp;quot;, &amp;quot;,&amp;quot; → &amp;quot;1234567&amp;quot;, nil&lt;br /&gt;
		&amp;quot;1,234,56&amp;quot;, &amp;quot;,&amp;quot; → nil, &amp;quot;Ugyldig placering af tusindadskillere i heltalsdel&amp;quot;&lt;br /&gt;
]]&lt;br /&gt;
function p.fjernTusindadskillere(heltalsdelMedEventuelleTusindadskillere, tusindadskiller)&lt;br /&gt;
&lt;br /&gt;
	local heltalsdelUdenTusindadskillere&lt;br /&gt;
	local fejltekstEllerNil&lt;br /&gt;
&lt;br /&gt;
	local talletErGyldigt = erGyldigtHeltalMedMuligeTusindadskillere(&lt;br /&gt;
			heltalsdelMedEventuelleTusindadskillere, tusindadskiller) &lt;br /&gt;
&lt;br /&gt;
	if talletErGyldigt then&lt;br /&gt;
		heltalsdelUdenTusindadskillere&lt;br /&gt;
			= p.removeAll(&lt;br /&gt;
				heltalsdelMedEventuelleTusindadskillere, &lt;br /&gt;
				p.tusindadskillerpattern(tusindadskiller))&lt;br /&gt;
		fejltekstEllerNil = nil&lt;br /&gt;
	else&lt;br /&gt;
		heltalsdelUdenTusindadskillere = nil&lt;br /&gt;
		fejltekstEllerNil = &amp;quot;Ugyldigt placerede eller ugyldige tusindadskillere i heltalsdelen &amp;#039;&amp;quot; .. heltalsdelMedEventuelleTusindadskillere .. &amp;quot;&amp;#039;.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return heltalsdelUdenTusindadskillere, fejltekstEllerNil&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function erGyldigtHeltalMedMuligeTusindadskillere(&lt;br /&gt;
		heltalsdelMedEventuelleTusindadskillere, tusindadskiller)&lt;br /&gt;
&lt;br /&gt;
	local s = heltalsdelMedEventuelleTusindadskillere&lt;br /&gt;
&lt;br /&gt;
	-- Fjern grupper af &amp;quot;tddd&amp;quot; i slutningen indtil intet match, hvor t er &lt;br /&gt;
	-- en tusindadskiller og d er et ciffer.&lt;br /&gt;
	local pattern = p.tusindadskillerpattern(tusindadskiller) .. &amp;quot;%d%d%d$&amp;quot;&lt;br /&gt;
	local numberOfReplacements&lt;br /&gt;
	local totalNumberOfReplacements = 0&lt;br /&gt;
	repeat&lt;br /&gt;
		s, numberOfReplacements = s:gsub(pattern, &amp;quot;&amp;quot;)&lt;br /&gt;
		totalNumberOfReplacements = totalNumberOfReplacements + numberOfReplacements&lt;br /&gt;
	until numberOfReplacements == 0&lt;br /&gt;
	&lt;br /&gt;
	local theNumberIsValid&lt;br /&gt;
	&lt;br /&gt;
	if totalNumberOfReplacements == 0 then&lt;br /&gt;
		-- Der var ingen tusindadskillere, i hvert fald ikke korrekt placeret.&lt;br /&gt;
		theNumberIsValid = p.isSequenceOfAtLeastOneDigit(s)&lt;br /&gt;
	else&lt;br /&gt;
		-- Der var tusindadskillere. Hvis resten er mellem 1 og 3 cifre, var&lt;br /&gt;
		-- tallet korrekt.&lt;br /&gt;
		theNumberIsValid = p.isSequenceOf1To3Digits(s)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return theNumberIsValid&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.tusindadskillerpattern(tusindadskiller)&lt;br /&gt;
	return &amp;quot;[&amp;quot; .. tusindadskiller .. &amp;quot;]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isSequenceOfAtLeastOneDigit(s)&lt;br /&gt;
	return not not s:match(&amp;quot;^%d+$&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isSequenceOf1To3Digits(s)&lt;br /&gt;
	return not not s:match(&amp;quot;^%d%d?%d?$&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.danDanskOutputtal(eventueltFortegnEllerTom, &lt;br /&gt;
		heltalsdelUdenTusindadskillere, decimalerEllerNil)&lt;br /&gt;
&lt;br /&gt;
	local heltalsdelMedDanskeTusindadskillere &lt;br /&gt;
		= p.indsaetTusindadskillere(heltalsdelUdenTusindadskillere)&lt;br /&gt;
			-- Giver fx &amp;quot;123.456.789&amp;quot; eller &amp;quot;123&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	local danskDecimaldel&lt;br /&gt;
		= p.danDanskDecimaldel(decimalerEllerNil) -- Giver fx &amp;quot;,12&amp;quot;, &amp;quot;,6&amp;quot; eller &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	local samletTal&lt;br /&gt;
		= eventueltFortegnEllerTom &lt;br /&gt;
			.. heltalsdelMedDanskeTusindadskillere &lt;br /&gt;
			.. danskDecimaldel&lt;br /&gt;
&lt;br /&gt;
    return samletTal&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.danDanskDecimaldel(decimalerEllerNil)&lt;br /&gt;
&lt;br /&gt;
    if decimalerEllerNil then&lt;br /&gt;
		return &amp;quot;,&amp;quot; .. decimalerEllerNil&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.fejlangivelseskode(fejltekst, angivFejlSynligt)&lt;br /&gt;
	&lt;br /&gt;
	if angivFejlSynligt then&lt;br /&gt;
		return &amp;#039;&amp;lt;sup&amp;gt;&amp;lt;span style=&amp;quot;color:red&amp;quot; title=&amp;quot;Skabelonen Formattal kan ikke konvertere dette tal: &amp;#039; .. fejltekst .. &amp;#039;&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;/sup&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.danSamletFejlreturstreng(inputtal, inputrest, fejltekst, &lt;br /&gt;
	angivFejlSynligt)&lt;br /&gt;
     &lt;br /&gt;
    return &lt;br /&gt;
    	inputtal &lt;br /&gt;
    	.. p.fejlangivelseskode(fejltekst, angivFejlSynligt)&lt;br /&gt;
    	.. inputrest &lt;br /&gt;
    	.. fejlkategorikode&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.removeAll(s, pattern)&lt;br /&gt;
	return s:gsub(pattern, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	p.modsatAdskillertegn(adskillertegn)&lt;br /&gt;
	&lt;br /&gt;
	Returner det modsatte adskillertegn til det givne.&lt;br /&gt;
	&lt;br /&gt;
	adskillertegn:&lt;br /&gt;
		Skal være enten &amp;quot;.&amp;quot; eller &amp;quot;,&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
	Returværdi:&lt;br /&gt;
		&amp;quot;,&amp;quot; hvis adskillertegn er &amp;quot;.&amp;quot;.&lt;br /&gt;
		&amp;quot;.&amp;quot; hvis adskillertegn er &amp;quot;,&amp;quot; (eller hvad som helst andet).&lt;br /&gt;
]]&lt;br /&gt;
function p.modsatAdskillertegn(adskillertegn)&lt;br /&gt;
    if adskillertegn == &amp;quot;.&amp;quot; then&lt;br /&gt;
    	return &amp;quot;,&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        return &amp;quot;.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.opsplitIFortegnOgRest(s)&lt;br /&gt;
&lt;br /&gt;
    local eventueltFortegnEllerTom, reststrengUdenFortegn = s:match(&amp;quot;^([+-]?) *(.*)$&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	return eventueltFortegnEllerTom, reststrengUdenFortegn&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	p.indsaetTusindadskillere(heltalsStreng)&lt;br /&gt;
	&lt;br /&gt;
	Hjælpefunktion. &lt;br /&gt;
	&lt;br /&gt;
	Indsæt tusindadskillere i en given streng af cifre.&lt;br /&gt;
&lt;br /&gt;
	Eksempler:	&lt;br /&gt;
		p.indsaetTusindadskillere(&amp;quot;&amp;quot;) == &amp;quot;&amp;quot;&lt;br /&gt;
		p.indsaetTusindadskillere(&amp;quot;1&amp;quot;) == &amp;quot;1&amp;quot;&lt;br /&gt;
		p.indsaetTusindadskillere(&amp;quot;12&amp;quot;) == &amp;quot;12&amp;quot;&lt;br /&gt;
		p.indsaetTusindadskillere(&amp;quot;123&amp;quot;) == &amp;quot;123&amp;quot;&lt;br /&gt;
		p.indsaetTusindadskillere(&amp;quot;1234&amp;quot;) == &amp;quot;1.234&amp;quot;&lt;br /&gt;
		p.indsaetTusindadskillere(&amp;quot;123456789&amp;quot;) == &amp;quot;123.456.789&amp;quot;&lt;br /&gt;
]]&lt;br /&gt;
function p.indsaetTusindadskillere(heltalsstreng)&lt;br /&gt;
	local akkumulator = heltalsstreng -- Heltal uden tusindadskillere, fx &amp;quot;123456789&amp;quot;.&lt;br /&gt;
	local antalTusindAdskillereIndsat&lt;br /&gt;
&lt;br /&gt;
    repeat  &lt;br /&gt;
        akkumulator, antalTusindAdskillereIndsat &lt;br /&gt;
        	= string.gsub(akkumulator, &amp;quot;^(%d+)(%d%d%d)&amp;quot;, &amp;#039;%1.%2&amp;#039;)&lt;br /&gt;
    until antalTusindAdskillereIndsat == 0&lt;br /&gt;
&lt;br /&gt;
    return akkumulator  -- Heltal med tusindadskillere, fx &amp;quot;123.456.789&amp;quot;.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>MartinusWiki&gt;Jhertel</name></author>
	</entry>
</feed>