Moduł:Rozmieniarka
Użycie
edytujOpis parametrów
edytujPrzykład
edytuj-- Przykładowe użycie:
local amount = 123.45;
local limits = {
[10] = 2, -- limit dla nominału 10
[0.2] = 5, -- limit dla nominału 0.2
};
local result = calculateNominals(amount, limits);
local str="Kwota: "..amount.."\n";
str=str.."Nominały: \n";
for _, entry in ipairs(result) do
str=str..entry.nominal.." x "..entry.count.."\n";
end;
return str;
Błędy
edytujBłędy należy zgłaszać na stronie Wikibooks:Kwestie techniczne.
Parametry szablonu (strukturyzacja Wizualnego Edytora)
edytujBrak opisu.
Parametr | Opis | Typ | Status | |||
---|---|---|---|---|---|---|
Nie podano parametrów |
Zobacz też
edytuj
Powyższy opis jest dołączany ze strony Moduł:Rozmieniarka/opis. (edytuj | historia)
Zobacz podstrony tego modułu. |
-- Funkcja 'calculateNominals' służy do jednoznacznego ustalania takiej konfiguracji nominałów, aby były one jak najgrubsze (tym samym wydajemy kwotę możliwie najmniejszą ilością monet i/lub banknotów).
local p = {}
function p.calculateNominals(frame)
local amount = frame.args[1] and tonumber(mw.text.trim(frame.args[1])) or 0
local limits = {
[500] = frame.args[2] and tonumber(mw.text.trim(frame.args[2])) or 0, -- limit dla nominału 500 zł
[200] = frame.args[3] and tonumber(mw.text.trim(frame.args[3])) or 0, -- limit dla nominału 200 zł
[100] = frame.args[4] and tonumber(mw.text.trim(frame.args[4])) or 0, -- limit dla nominału 100 zł
[50] = frame.args[5] and tonumber(mw.text.trim(frame.args[5])) or 0, -- limit dla nominału 50 zł
[20] = frame.args[6] and tonumber(mw.text.trim(frame.args[6])) or 0, -- limit dla nominału 20 zł
[10] = frame.args[7] and tonumber(mw.text.trim(frame.args[7])) or 0, -- limit dla nominału 10 zł
[5] = frame.args[8] and tonumber(mw.text.trim(frame.args[8])) or 0, -- limit dla nominału 5 zł
[2] = frame.args[9] and tonumber(mw.text.trim(frame.args[9])) or 0, -- limit dla nominału 2 zł
[1] = frame.args[10] and tonumber(mw.text.trim(frame.args[10])) or 0, -- limit dla nominału 1 zł
[0.5] = frame.args[11] and tonumber(mw.text.trim(frame.args[11])) or 0, -- limit dla nominału 50 gr
[0.2] = frame.args[12] and tonumber(mw.text.trim(frame.args[12])) or 0, -- limit dla nominału 20 gr
[0.1] = frame.args[13] and tonumber(mw.text.trim(frame.args[13])) or 0, -- limit dla nominału 10 gr
[0.05] = frame.args[14] and tonumber(mw.text.trim(frame.args[14])) or 0, -- limit dla nominału 5 gr
[0.02] = frame.args[15] and tonumber(mw.text.trim(frame.args[15])) or 0, -- limit dla nominału 2 gr
[0.01] = frame.args[16] and tonumber(mw.text.trim(frame.args[16])) or 0 -- limit dla nominału 1 gr
}
local nominals = {500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01}
local result = {}
for _, nominal in ipairs(nominals) do
local count = math.floor(amount / nominal)
if limits[nominal] ~= nil and type(limits[nominal]) == 'number' then
count = math.min(count, limits[nominal])
end
if count > 0 then
table.insert(result, {nominal = nominal, count = count})
amount = amount - (nominal * count)
end
end
local str="Kwota: "..amount..", ";
str=str.."Nominały: ";
local str2=nil;
for _, entry in ipairs(result) do
str2=(str2 and (str2..", ") or "")..entry.nominal.." x "..entry.count;
end;
return str..(str2 or "brak")..".";
end
return p