Szerkesztő:Tilar Vehulor/Lua/Szám kiírva
Megjelenés
(Szerkesztő:Tilar Vehulor/Lua/szam kiirva szócikkből átirányítva)
A Modul:Szám kiírva átrendezett, olvashatóbbá tett változata.
local p = {}
-- dictionary
local ones_names = { 'egy', 'két', 'három', 'négy', 'öt', 'hat', 'hét', 'nyolc', 'kilenc' }
local tens_names = { 'tíz', 'húsz', 'harminc', 'negyven', 'ötven', 'hatvan', 'hetven', 'nyolcvan', 'kilencven' }
-- is_last: if there is an other word after this number,
-- you can use 'két', but you must use 'kettő' otherwise
local function group_to_string(number, is_last)
local ones = number % 10
local tens = (number - ones) % 100
local hundreds = number - (ones + tens)
-- hundreds
local hundreds_text = ''
if hundreds == 0 then
hundreds_text = ''
elseif hundreds == 100 then
hundreds_text = 'száz'
else
hundreds_text = ones_names[hundreds/100] .. 'száz'
end
-- tens
local tens_text = ''
if tens == 0 then
tens_text = ''
elseif tens == 10 then
if ones == 0 then
tens_text = 'tíz'
else
tens_text = 'tizen'
end
elseif tens == 20 then
if ones == 0 then
tens_text = 'húsz'
else
tens_text = 'huszon'
end
else
tens_text = tens_names[tens/10]
end
-- ones
local ones_text = ''
if ones == 0 then
ones_text = ''
elseif ones == 2 and last then
ones_text = 'kettő'
else
ones_text = ones_names[ones]
end
return hundreds_text .. tens_text .. ones_text
end
local function number_to_string(number)
-- if number is negative or is not (close to) an integer or is too big: return empty string
if number < 0 or number >= 1E12 or math.abs(number - math.floor(number)) > 1E-12 then
return ''
end
if number == 0 then
return 'nulla'
end
if number < 1000 then
return group_to_string(number, true)
elseif number < 2000 then
return 'ezer' .. group_to_string(number % 1000, true)
else
local groups = {}
local ones = number % 1000
local thousands = (number - ones) % 1E6
local millions = (number - (ones + thousands)) % 1E9
local billions = number - (ones + thousands + millions) % 1E12
if billions > 0 then
table.insert(groups, group_to_string(billions / 1E9) .. 'milliárd')
end
if millions > 0 then
table.insert(groups, group_to_string(millions / 1E6) .. 'millió')
end
if thousands > 0 then
table.insert(groups, group_to_string(thousands / 1000) .. 'ezer')
end
if ones > 0 then
table.insert(groups, group_to_string(ones, true))
end
return table.concat(groups, '-')
end
return ''
end
function p._main(number)
-- validation
if not number or not tonumber(number) then
return ''
end
return number_to_string(tonumber(number))
end
function p.main(frame)
return p._main(require('Modul:Arguments').getArgs(frame)[1])
end
return p