<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ro">
	<id>https://enciclopedia.md/index.php?action=history&amp;feed=atom&amp;title=Modul%3AFormatnum</id>
	<title>Modul:Formatnum - Revizia istoricului</title>
	<link rel="self" type="application/atom+xml" href="https://enciclopedia.md/index.php?action=history&amp;feed=atom&amp;title=Modul%3AFormatnum"/>
	<link rel="alternate" type="text/html" href="https://enciclopedia.md/index.php?title=Modul:Formatnum&amp;action=history"/>
	<updated>2026-04-23T20:03:31Z</updated>
	<subtitle>Istoricul versiunilor pentru această pagină din wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://enciclopedia.md/index.php?title=Modul:Formatnum&amp;diff=407&amp;oldid=prev</id>
		<title>Admin: Pagină nouă: local p = {} local isNilOrEmpty= require(&#039;Modul:StringUtils&#039;).isNilOrEmpty   -- this function receives a number, tries to guess the layout and returns the  -- same number with the thousand separator stripped and the decimal separator -- converted to English format p._stripSeparators = function(input)     if isNilOrEmpty(input) then return nil end 	local comma = &#039;,&#039; 	local dot = &#039;%.&#039; 	local _, commaCount = string.gsub(input, comma, comma) 	local _, dotCount = string.gsub(input...</title>
		<link rel="alternate" type="text/html" href="https://enciclopedia.md/index.php?title=Modul:Formatnum&amp;diff=407&amp;oldid=prev"/>
		<updated>2024-07-18T18:26:14Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: local p = {} local isNilOrEmpty= require(&amp;#039;Modul:StringUtils&amp;#039;).isNilOrEmpty   -- this function receives a number, tries to guess the layout and returns the  -- same number with the thousand separator stripped and the decimal separator -- converted to English format p._stripSeparators = function(input)     if isNilOrEmpty(input) then return nil end 	local comma = &amp;#039;,&amp;#039; 	local dot = &amp;#039;%.&amp;#039; 	local _, commaCount = string.gsub(input, comma, comma) 	local _, dotCount = string.gsub(input...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pagină nouă&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local isNilOrEmpty= require(&amp;#039;Modul:StringUtils&amp;#039;).isNilOrEmpty&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- this function receives a number, tries to guess the layout and returns the &lt;br /&gt;
-- same number with the thousand separator stripped and the decimal separator&lt;br /&gt;
-- converted to English format&lt;br /&gt;
p._stripSeparators = function(input)&lt;br /&gt;
    if isNilOrEmpty(input) then return nil end&lt;br /&gt;
	local comma = &amp;#039;,&amp;#039;&lt;br /&gt;
	local dot = &amp;#039;%.&amp;#039;&lt;br /&gt;
	local _, commaCount = string.gsub(input, comma, comma)&lt;br /&gt;
	local _, dotCount = string.gsub(input, dot, dot)&lt;br /&gt;
	if dotCount == 0 then&lt;br /&gt;
		if commaCount == 0 then --plain old integer&lt;br /&gt;
			return tonumber(input)&lt;br /&gt;
		elseif commaCount == 1 then -- floating point, Romanian format&lt;br /&gt;
			--TODO better guesswork&lt;br /&gt;
			return tonumber(string.gsub(input, comma, dot), 10)&lt;br /&gt;
		else -- integer with thousand separator&lt;br /&gt;
			return tonumber(string.gsub(input, comma, &amp;quot;&amp;quot;), 10)&lt;br /&gt;
		end&lt;br /&gt;
	elseif dotCount == 1 then&lt;br /&gt;
		if commaCount == 0 then  --floating point, English format&lt;br /&gt;
			--TODO better guesswork&lt;br /&gt;
			return tonumber(input, 10)&lt;br /&gt;
		elseif commaCount == 1 then --one each; the last one is decimal sep&lt;br /&gt;
			local commaIndex = mw.ustring.find(input, comma)&lt;br /&gt;
			local dotIndex = mw.ustring.find(input, dot)&lt;br /&gt;
			if commaIndex &amp;gt; dotIndex then&lt;br /&gt;
				return tonumber(string.gsub(string.gsub(input, dot, &amp;quot;&amp;quot;), comma, dot), 10)&lt;br /&gt;
			else&lt;br /&gt;
				return tonumber(string.gsub(input, comma, &amp;quot;&amp;quot;), 10)&lt;br /&gt;
			end&lt;br /&gt;
		else -- float with thousand separator comma&lt;br /&gt;
			return tonumber(string.gsub(input, comma, &amp;quot;&amp;quot;), 10)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if commaCount == 0 then  --integer with thousand separator&lt;br /&gt;
			return tonumber(string.gsub(input, dot, &amp;quot;&amp;quot;), 10)&lt;br /&gt;
		elseif commaCount == 1 then -- float with thousand separator dot&lt;br /&gt;
			return tonumber(string.gsub(string.gsub(input, dot, &amp;quot;&amp;quot;), comma, dot), 10)&lt;br /&gt;
		else -- invalid&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.stripSeparators(frame)&lt;br /&gt;
	ret = p._stripSeparators(frame.args[1])&lt;br /&gt;
	if ret then return ret else return &amp;quot;&amp;quot; end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._beautify(lang, number)&lt;br /&gt;
	if lang:getCode() ~= &amp;quot;ro&amp;quot; then return number end&lt;br /&gt;
	number = mw.allToString(number)&lt;br /&gt;
	number = string.gsub(number, &amp;quot;E%+([0-9]+)&amp;quot;, &amp;quot; × 10&amp;lt;sup&amp;gt;%1&amp;lt;/sup&amp;gt;&amp;quot;)&lt;br /&gt;
	number = string.gsub(number, &amp;quot;E([0-9]+)&amp;quot;, &amp;quot; × 10&amp;lt;sup&amp;gt;%1&amp;lt;/sup&amp;gt;&amp;quot;)&lt;br /&gt;
	number = string.gsub(number, &amp;quot;E%-([0-9]+)&amp;quot;, &amp;quot; × 10&amp;lt;sup&amp;gt;-%1&amp;lt;/sup&amp;gt;&amp;quot;)&lt;br /&gt;
	return number&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatNum(number, lang, prec, compact)&lt;br /&gt;
	mw.logObject(number, &amp;quot;number1&amp;quot;)&lt;br /&gt;
	if lang ~= nil and mw.language.isKnownLanguageTag(lang) == true then &lt;br /&gt;
		lang = mw.getLanguage(lang) &lt;br /&gt;
	end&lt;br /&gt;
	if lang == nil or lang == {} or type(lang) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		lang = mw.getContentLanguage()&lt;br /&gt;
	end&lt;br /&gt;
	local processed = p._stripSeparators(number)&lt;br /&gt;
	if processed == nil then return number end&lt;br /&gt;
&lt;br /&gt;
    -- Check the presence of an exponent (incorrectly managed in mw.language:FormatNum() and even forgotten due to an internal bug, e.g. in Hindi)&lt;br /&gt;
    number = tostring(processed)&lt;br /&gt;
    local pos = string.find(number, &amp;#039;[Ee]&amp;#039;)&lt;br /&gt;
    local exponent&lt;br /&gt;
    if pos ~= nil then&lt;br /&gt;
        exponent = string.sub(number, pos + 1, string.len(number))&lt;br /&gt;
        number = string.sub(number, 1, pos - 1)&lt;br /&gt;
    else&lt;br /&gt;
        exponent = &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
	number = tonumber(number)&lt;br /&gt;
	mw.logObject(number, &amp;quot;number2&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- TODO: do something with prec&lt;br /&gt;
    if compact then&lt;br /&gt;
        number = lang:formatNum(number, { noCommafy = &amp;#039;y&amp;#039; }) -- caveat: can load localized resources for up to 20 languages&lt;br /&gt;
    else&lt;br /&gt;
        number = lang:formatNum(number) -- caveat: can load localized resources for up to 20 languages&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Append the localized base-10 exponent without grouping separators (there&amp;#039;s no reliable way to detect a localized leading symbol &amp;#039;E&amp;#039;)&lt;br /&gt;
    if exponent ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        number = number .. &amp;#039;E&amp;#039; .. tonumber(exponent)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return p._beautify(lang, number)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatNum(frame)&lt;br /&gt;
	local args = require(&amp;quot;Modul:Arguments&amp;quot;).getArgs(frame)&lt;br /&gt;
    local prec    = args.prec or &amp;#039;&amp;#039;&lt;br /&gt;
    local sep     = args.sep or &amp;#039;&amp;#039;&lt;br /&gt;
    local number  = args[1] or args.number or &amp;#039;&amp;#039;&lt;br /&gt;
    local lang    = args[2] or args.lang or &amp;#039;&amp;#039;&lt;br /&gt;
    return p._formatNum(number, lang, prec, sep ~= &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>