ماژول:Number to word
بو ماژول اوچون بلگهلر ماژول:Number to word/بلگه صفحهسینده یارادیلا بیلینر
local p = {}
local convert = require('Module:Numeral converter').convert
local yekan = {
'',
'بیر',
'ایکی',
'اۆچ',
'دؤرد',
'بئش',
'آلتی',
'یئددی',
'سکگیز',
'دوْققوز'}
local dahgan = {
'',
'',
'ایگیرمی',
'اوْتوز',
'قیرخ',
'اَللی',
'آلتمیش',
'یئتمیش',
'سکسن',
'دوْخسان'}
local sadgan = {
'',
'یوز',
'ایکی یوز',
'اۆچ یوز',
'دؤرد یوز',
'بئش یوز',
'آلتی یوز',
'یئددی یوز',
'سکگیز یوز',
'دوْققوز یوز'}
local exceptions = {
'اوْن',
'اوْن بیر',
'اوْن ایکی',
'اوْن اۆچ',
'اوْن دؤرد',
'اوْن بئش',
'اوْن آلتی',
'اوْن یئددی',
'اوْن سکگیز',
'اوْن دوققوز'}
local scale = {
'',
' مین',
' میلیون ',
' میلیارد',
' بیلیون',
' بیلیارد',
' تریلیون',
' ترلیارد',
' کوآدریلیون',
' کادریلیارد',
' کوینتیلیون',
' کوانتینیارد'}
function threedigit_words(threedigit)
local words = ''
if string.sub(threedigit,1,1) ~= '0' and string.sub( threedigit, 2)~='00' then
words = sadgan[tonumber(string.sub(threedigit,1,1))+1] .. ' و '
else
words = sadgan[tonumber(string.sub(threedigit,1,1))+1]
end
if string.sub(threedigit,2,2) == '1' then
words = words .. exceptions[tonumber(string.sub(threedigit,3,3))+1]
else
if string.sub(threedigit,3,3) ~= '0' and string.sub(threedigit,2,2)~='0' then
words = words .. dahgan[tonumber(string.sub(threedigit,2,2))+1] .. ' و '
else
words = words .. dahgan[tonumber(string.sub(threedigit,2,2))+1]
end
words = words .. yekan[tonumber(string.sub(threedigit,3,3))+1]
end
return words
end
function strnum2words(strnumber)
if tonumber(strnumber) == 0 then
return 'صیفیر'
end
if #strnumber > #scale * 3 then
error('خارج از محدوده!')
end
length = #strnumber
if length%3 ~= 0 then
strnumber = string.rep('0', 3-length%3) .. strnumber
end
groups = (#strnumber) / 3
local words = ''
group = groups
while group > 0 do
threedigit = string.sub( strnumber, group*3-2, group*3)
word3 = threedigit_words(threedigit)
if word3 ~= '' and group ~= groups then
if words == '' then
words = word3 .. scale[groups-group+1]
else
words = word3 .. scale[groups-group+1] .. ' ' .. words
end
else
words = word3 .. words
end
group = group - 1
end
return sign.. words
end
function ordinal(nubmer)
words = strnum2words(nubmer)
if mw.ustring.sub(words,-2) == 'اۆچ' then
words = words:gsub('سه$', 'سوم')
return words
else
return words .. 'نجی'
end
end
function ordinal2(nubmer)
words = strnum2words(nubmer)
if mw.ustring.sub(words,-2) == 'اۆچ' then
words = words:gsub('اۆچ$', 'اۆچونجو')
else
return words .. 'جو/جی'
end
end
function p.run(frame)
local args = frame.args
number = mw.ustring.match(convert("en",args[1]), "(%d*)%W*$")
if string.sub(number,1,1) == '-' or string.sub(number,1,1) == '−' then
sign = 'منفی '
number = mw.text.trim(string.sub(number,2))
else
sign = ''
end
if args[2] == 'جو/جی' then
return ordinal(number)
elseif args[2] == 'جو/جی' then
return ordinal2(number)
else
return strnum2words(number)
end
end
return p