ماژول:Number to word

ویکی‌پدیا، آچیق بیلیک‌لیک‌دن
پرش به ناوبری پرش به جستجو

بو ماژول اینگیلیسجه عددی آلیب و اونی تورکجه یه چئویرر.

ایستیفاده[دَییشدیر]

ماژولی چاغیراندا «نجی» یادا «جی» پارامترین ایضافه الرسینیز جوایندا ترتیبی عدد ورجاخ (بیرینجی، ایکینجی، اوچونجی و ...) میثال:

{{#invoke:number to word|run|999}}

وئرر:

دوْققوز یوز دوْخسان دوْققوز

{{#invoke:Number to word|run|  999|نجی}}

وئرر:

دوْققوز یوز دوْخسان دوْققوزنجی

(دیقت:وارید اولان عددین اولی بوش اولا بیلر و ماژول اونی پشتیبانلق الییر.

ان بویوک عدد ۳۶ رقملی عدد اولابیلر (کوانتینیارد): (برای اطلاعات بیشتر {{نام اعداد بزرگ}} را ببینید)

{{#invoke:number to word|run|922337203685477580732132132132212239|نجی}}

وئرر:

دوْققوز یوز ایگیرمی ایکی کوانتینیارد اۆچ یوز اوْتوز یئددی کوینتیلیون ایکی یوز اۆچ کادریلیارد آلتی یوز سکسن بئش کوآدریلیون دؤرد یوز یئتمیش یئددی ترلیارد بئش یوز سکسن تریلیون یئددی یوز اوْتوز ایکی بیلیارد یوز اوْتوز ایکی بیلیون یوز اوْتوز ایکی میلیارد یوز اوْتوز ایکی میلیون ایکی یوز اوْن ایکی مین ایکی یوز اوْتوز دوْققوزنجی

منفی عددلر ده ایستیفاده اولا بیلینر:


{{#invoke:number to word|run|  -   100024|نجی}}

وئرر:

منفی یوز مین ایگیرمی دؤردنجی

(توجه کنید که بین علامت منفی و عدد پس از آن می‌تواند فاصله وجود داشته باشد)

جستارهای وابسته[دَییشدیر]

  • پودمان:NumberSpell (پودمانی مشابه اما با ورودی و خروجی به زبان انگلیسی و حداکثر تا عدد ۱۰۰)

local p = {}

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
        return mw.ustring.sub(words,0,-3) .. 'اوچونجو'
    else
        return words .. 'نجی'
	end
end

function p.run(frame)
    local args = frame.args
	number = string.match(mw.text.trim(args[1]), '-?%s*%d+')
	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