Fandom

Nahverkehr Wiki

Modul:Measure

78Seiten in
diesem Wiki
Seite hinzufügen
Diskussion0

Störung durch Adblocker erkannt!


Wikia ist eine gebührenfreie Seite, die sich durch Werbung finanziert. Benutzer, die Adblocker einsetzen, haben eine modifizierte Ansicht der Seite.

Wikia ist nicht verfügbar, wenn du weitere Modifikationen in dem Adblocker-Programm gemacht hast. Wenn du sie entfernst, dann wird die Seite ohne Probleme geladen.

  local NoError, FormatNum = pcall( require, "Module:FormatNum" )
    if type( FormatNum ) == "table" then
      FormatNum = FormatNum.FormatNum()
  else
    return '<span class="error"></span>'
  end
 
    local Measure = {}
 
	Measure.Convert = function (tArgs)
		--[=[ enthält die Umrechnung
		Inhalt von tArgs:
		tArgs.data      number	   Zu konvertierender Wert
		tArgs.unit      string     Vorgabeeinheit von data
		tArgs.unitL     string     etwaige, kleitere Einheit
		tArgs.unitU     string     etwaige, größere  Einheit
		tArgs.factorL   number     Faktor unit/unitL,    Null für keine Umrechnung
		tArgs.factorU   number     Faktor unitU/unit,    Null für keine Umrechnung
		tArgs.borderL   number     Schwellwert zur kleineren Einheit
		tArgs.borderU   number     Schwellwert zur größeren  Einheit
		tArgs.eps       number     Unsicherheit false für kein Wert
		tArgs.round     number     Nachkommastellen
		]=]
		tResult = {}
		if 	type(tArgs.data) ~= 'number' or
				type(tArgs.borderL or 0) ~= 'number' or
				type(tArgs.factorL or 0) ~= 'number' or
				type(tArgs.borderU or 0) ~= 'number' or
				type(tArgs.factorU or 0) ~= 'number' or
				(tArgs.unit or "") ==""  then
			return false, tResult;
		end
		local IsMinus = tArgs.data  < 0;
		if IsMinus then
			tArgs.data = 0 - tArgs.data
		end
		tResult.data = tArgs.data
		tResult.unit = tArgs.unit
		if tonumber(tArgs.eps)  then
			tResult.eps  = tArgs.eps
		end
		if (tArgs.factorL or 0) ~= 0 then
			if tArgs.data < tArgs.borderL then
				tResult.data = tArgs.data * tArgs.factorL
				if type(tArgs.eps) == 'number' then
					tResult.eps  = tArgs.eps * tArgs.factorL
				end
				tResult.unit = tArgs.unitL
			end
		end
		if (tArgs.factorU or 0)  ~= 0 then
			if tArgs.data >= tArgs.borderU then
				tResult.data = tArgs.data / tArgs.factorU
				if type(tArgs.eps) == 'number' then
					tResult.eps  = tArgs.eps  / tArgs.factorU
				end
				tResult.unit = tArgs.unitU
			end
		end
		if IsMinus then
			tResult.data = 0 - tResult.data
		end
        if type(tArgs.round) == 'number' then
			tArgs.round = math.floor(tArgs.round);
			tResult.data = math.floor(tResult.data * 10^tArgs.round + 0.5)/10^tArgs.round ;
		end
		return true, tResult;
	end
 
	-- AutoConvert: Wie Convert, jedoch mit den Schwellwerten 1 und factorU
	Measure.AutoConvert = function (tArgs)
		local tResult = {}
	    local IsOk = true;
		if type(tArgs.factorU or 0) ~= 'number' then
			return false, tResult;
		end
		tArgs.borderL  = 1;               -- andere Werte werden hier einfach überschrieben.
		tArgs.borderU  = tArgs.factorU;   -- andere Werte werden hier einfach überschrieben.
		IsOk, tResult = Measure.Convert(tArgs)
		return IsOk, tResult;
	end
 
	Measure.Format = function (tArgs,tPara)
	--[=[ enthält die Formatierung der Zeichenkette
		Inhalt von tArgs:
		tArgs.data      string	   Wert
		tArgs.unit      string     Einheit
		tArgs.eps       string     Unsicherheit
		Inhalt von tPara:
		tPara.fmt       string     Zahlenformat: 'dewiki' oder 'ch'
		tPara.kl        logical    true  -> '(10 ± 2) km', false -> '10 ± 2 km'
		]=]
		local Text = ""
		if (tArgs.eps or "") ~= "" then
			if tPara.kl then
				Text = "(" .. tostring(tArgs.data) .. "&nbsp;&#177;&nbsp;" .. tostring(tArgs.eps) .. ")"
			else
				Text = tArgs.data .. "&nbsp;&#177;&nbsp;" .. tostring(tArgs.eps)
			end
		else
			Text = tArgs.data
		end
		Text = Text .. "&nbsp;" .. tArgs.unit;
		return Text
	end
 
    -- Run enthält die Gemeinsamkeiten der Funktionen p.Mass und p.Masz
	local function Run (frame,fmt)
		local Text = " "
		local tData = {}
		local IsOk = true
		local tbl = {}
		local Para = "";
		if tonumber(frame.args[1]) then
			tbl.data  =  tonumber(frame.args[1]);
		else
			Para =  "(".. (frame.args[1]  or "") .. ")";
			Para = frame:callParserFunction{ name = '#expr', args = Para }
			tbl.data  = tonumber(Para) or "";
		end
		tbl.unit     =          frame.args[2] or "";
		tbl.borderL  = tonumber(frame.args[3] or "")
		tbl.unitL    =          frame.args[4] or "";
		tbl.factorL  = tonumber(frame.args[5] or 0)
		tbl.borderU  = tonumber(frame.args[6] or "")
		tbl.unitU    =          frame.args[7] or "";
		tbl.factorU  = tonumber(frame.args[8] or 0)
		tbl.eps      = tonumber(frame.args.eps or "")
		tbl.round    = tonumber(frame.args.round or "")
		if type(tbl.data) ~= 'number' then
			Text = tostring(frame.args[1] or "") .. '<span style="display:none">[[Vorlage:Maß/Wartung/Maßzahl nicht numerisch|dep1]]</span>';
			return false, Text
		end
		-- Sonderregelungen km und km²
		if tbl.unit  =="km" and tbl.unitL=="" then
			tbl.borderL = 1;
			tbl.unitL   = "m";
			tbl.factorL = 1000;
		end
		if tbl.unit  =="km²" and tbl.unitL=="" then
			tbl.borderL = 1;
			tbl.unitL   = "ha";
			tbl.factorL = 100;
		end
		if tbl.unit  =="" then
			tbl.borderL = 1;
			tbl.factorL = 0;
		end
		IsOk, tData = Measure.Convert(tbl)
		tData.data = frame:expandTemplate{title = 'FormatNum', args = {tData.data,fmt}}
        --tData.data = FormatNum.format(tData.data,fmt)
		if tonumber(tData.eps) then
		    tData.eps  = frame:expandTemplate{title = 'FormatNum', args = {tData.eps, fmt}}
            -- tData.eps  = FormatNum.format(tData.eps,fmt)
		end
		local tPar = {}
		tPar.kl = (frame.args.kl or "") ~= ""
		tPar.fmt = fmt;
 
		if not IsOk then
			Text = '<span class="error">Unzulässige Werte bei Aufruf von Measure;</span>';
			return false, Text
		end
		Text =  Measure.Format(tData,tPar);
		return true, Text
	end   -- Run
 
	local p = {}
		function p.Masz(frame)
			local FR = frame:getParent()
			local IsOk, Out =  Run(FR,'dewiki')
			return Out
		end
 
		function p.Mass(frame)
			local FR = frame:getParent()
			local IsOk, Out =  Run(FR,'ch')
			return  Out
		end
 
		function p.Measure()
			return Measure
		end
	return p

Auch bei Fandom

Zufälliges Wiki