-- Sayıların farklı temsilleri arasında dönüşüm yapmak için kullanılan modül local ones_position = { [0] = 'sıfır', [1] = 'bir', [2] = 'iki', [3] = 'üç', [4] = 'dört', [5] = 'beş', [6] = 'altı', [7] = 'yedi', [8] = 'sekiz', [9] = 'dokuz', [10] = 'on', [11] = 'on bir', [12] = 'on iki', [13] = 'on üç', [14] = 'on dört', [15] = 'on beş', [16] = 'on altı', [17] = 'on yedi', [18] = 'on sekiz', [19] = 'on dokuz' } local ones_position_ord = { [0] = 'sıfırıncı', [1] = 'birinci', [2] = 'ikinci', [3] = 'üçüncü', [4] = 'dördüncü', [5] = 'beşinci', [6] = 'altıncı', [7] = 'yedinci', [8] = 'sekizinci', [9] = 'dokuzuncu', [10] = 'onuncu', [11] = 'onbirinci', [12] = 'onikinci', [13] = 'onüçüncü', [14] = 'ondördüncü', [15] = 'onbeşinci', [16] = 'onaltıncı', [17] = 'onyedinci', [18] = 'onsekizinci', [19] = 'ondokuzuncu' } local ones_position_plural = { [0] = 'sıfırlar', [1] = 'birler', [2] = 'ikiler', [3] = 'üçler', [4] = 'dörtler', [5] = 'beşler', [6] = 'altılar', [7] = 'yediler', [8] = 'sekizler', [9] = 'dokuzlar', [10] = 'onlar', [11] = 'onbirler', [12] = 'onikiler', [13] = 'onüçler', [14] = 'ondörtler', [15] = 'onbeşler', [16] = 'onaltılar', [17] = 'onyediler', [18] = 'onsekizler', [19] = 'ondokuzlar' } local tens_position = { [2] = 'yirmi', [3] = 'otuz', [4] = 'kırk', [5] = 'elli', [6] = 'altmış', [7] = 'yetmiş', [8] = 'seksen', [9] = 'doksan' } local tens_position_ord = { [2] = 'yirminci', [3] = 'otuzuncu', [4] = 'kırkıncı', [5] = 'ellinci', [6] = 'altmışıncı', [7] = 'yetmişinci', [8] = 'sekseninci', [9] = 'doksanıncı' } local tens_position_plural = { [2] = 'yirmiler', [3] = 'otuzlar', [4] = 'kırklar', [5] = 'elliler', [6] = 'altmışlar', [7] = 'yetmişler', [8] = 'seksenler', [9] = 'doksanlar' } local groups = { [1] = 'bin', [2] = 'milyon', [3] = 'milyar', [4] = 'trilyon', [5] = 'katrilyon', [6] = 'kentilyon', [7] = 'sekstilyon', [8] = 'septilyon', [9] = 'oktilyon', [10] = 'nonilyon', [11] = 'desilyon', [12] = 'undesilyon', [13] = 'duodesilyon', [14] = 'tredesilyon', [15] = 'quattuordecilyon', [16] = 'quindecilyon', [17] = 'sexdecilyon', [18] = 'septendecilyon', [19] = 'octodecilyon', [20] = 'novemdecilyon', [21] = 'vigintilyon', [22] = 'unvigintilyon', [23] = 'duovigintilyon', [24] = 'tresvigintilyon', [25] = 'quattuorvigintilyon', [26] = 'quinquavigintilyon', [27] = 'sesvigintilyon', [28] = 'septemvigintilyon', [29] = 'octovigintilyon', [30] = 'novemvigintilyon', [31] = 'trigintilyon', [32] = 'untrigintilyon', [33] = 'duotrigintilyon', [34] = 'trestrigintilyon', [35] = 'quattuortrigintilyon', [36] = 'quinquatrigintilyon', [37] = 'sestrigintilyon', [38] = 'septentrigintilyon', [39] = 'octotrigintilyon', [40] = 'noventrigintilyon', [41] = 'quadragintilyon', [51] = 'quinquagintilyon', [61] = 'sexagintilyon', [71] = 'septuagintilyon', [81] = 'octogintilyon', [91] = 'nonagintilyon', [101] = 'centilyon', [102] = 'uncentilyon', [103] = 'duocentilyon', [104] = 'trescentilyon', [111] = 'decicentilyon', [112] = 'undecicentilyon', [121] = 'viginticentilyon', [122] = 'unviginticentilyon', [131] = 'trigintacentilyon', [141] = 'quadragintacentilyon', [151] = 'quinquagintacentilyon', [161] = 'sexagintacentilyon', [171] = 'septuagintacentilyon', [181] = 'octogintacentilyon', [191] = 'nonagintacentilyon', [201] = 'ducentilyon', [301] = 'trecentilyon', [401] = 'quadringentilyon', [501] = 'quingentilyon', [601] = 'sescentilyon', [701] = 'septingentilyon', [801] = 'octingentilyon', [901] = 'nongentilyon', [1001] = 'millinilyon', } local roman_numerals = { I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000 } -- Converts a given valid roman numeral (and some invalid roman numerals) to a number. Returns -1, errorstring on error local function roman_to_numeral(roman) if type(roman) ~= "string" then return -1, "roman numeral not a string" end local rev = roman:reverse() local raising = true local last = 0 local result = 0 for i = 1, #rev do local c = rev:sub(i, i) local next = roman_numerals[c] if next == nil then return -1, "roman numeral contains illegal character " .. c end if next > last then result = result + next raising = true elseif next < last then result = result - next raising = false elseif raising then result = result + next else result = result - next end last = next end return result end -- Converts a given integer between 0 and 100 to English text (e.g. 47 -> forty-seven) local function numeral_to_english_less_100(num, ordinal, plural, zero) local terminal_ones, terminal_tens if ordinal then terminal_ones = ones_position_ord terminal_tens = tens_position_ord elseif plural then terminal_ones = ones_position_plural terminal_tens = tens_position_plural else terminal_ones = ones_position terminal_tens = tens_position end if num == 0 and zero ~= nil then return zero elseif num < 20 then return terminal_ones[num] elseif num % 10 == 0 then return terminal_tens[num / 10] else return tens_position[math.floor(num / 10)] .. ' ' .. terminal_ones[num % 10] end end local function standard_suffix(ordinal, plural) if ordinal then return '' end -- th if plural then return '' end -- s return '' end -- Converts a given integer (in string form) between 0 and 1000 to English text (e.g. 47 -> forty-seven) local function numeral_to_english_less_1000(num, use_and, ordinal, plural, zero) num = tonumber(num) if num < 100 then return numeral_to_english_less_100(num, ordinal, plural, zero) elseif num % 100 == 0 then local yuz = ones_position[math.floor(num/100)] if yuz == "bir" then yuz = "" end return yuz .. ' yüz' .. standard_suffix(ordinal, plural) else local yuz = ones_position[math.floor(num/100)] if yuz == "bir" then yuz = "" end return yuz .. ' yüz ' .. (use_and and '' or ' ') .. numeral_to_english_less_100(num % 100, ordinal, plural, zero) end end -- Converts a number expressed as a string in scientific notation to a string in standard decimal notation -- e.g. 1.23E5 -> 123000, 1.23E-5 = .0000123. Conversion is exact, no rounding is performed. local function scientific_notation_to_decimal(num) local exponent, subs = num:gsub("^%-?%d*%.?%d*%-?[Ee]([+%-]?%d+)$", "%1") if subs == 0 then return num end -- Input not in scientific notation, just return unmodified exponent = tonumber(exponent) local negative = num:find("^%-") local _, decimal_pos = num:find("%.") -- Mantissa will consist of all decimal digits with no decimal point local mantissa = num:gsub("^%-?(%d*)%.?(%d*)%-?[Ee][+%-]?%d+$", "%1%2") if negative and decimal_pos then decimal_pos = decimal_pos - 1 end if not decimal_pos then decimal_pos = #mantissa + 1 end -- Remove leading zeros unless decimal point is in first position while decimal_pos > 1 and mantissa:sub(1,1) == '0' do mantissa = mantissa:sub(2) decimal_pos = decimal_pos - 1 end -- Shift decimal point right for exponent > 0 while exponent > 0 do decimal_pos = decimal_pos + 1 exponent = exponent - 1 if decimal_pos > #mantissa + 1 then mantissa = mantissa .. '0' end -- Remove leading zeros unless decimal point is in first position while decimal_pos > 1 and mantissa:sub(1,1) == '0' do mantissa = mantissa:sub(2) decimal_pos = decimal_pos - 1 end end -- Shift decimal point left for exponent < 0 while exponent < 0 do if decimal_pos == 1 then mantissa = '0' .. mantissa else decimal_pos = decimal_pos - 1 end exponent = exponent + 1 end -- Insert decimal point in correct position and return return (negative and '-' or '') .. mantissa:sub(1, decimal_pos - 1) .. '.' .. mantissa:sub(decimal_pos) end -- Rounds a number to the nearest integer (NOT USED) local function round_num(x) if x%1 >= 0.5 then return math.ceil(x) else return math.floor(x) end end -- Rounds a number to the nearest two-word number (round = up, down, or "on" for round to nearest) -- Numbers with two digits before the decimal will be rounded to an integer as specified by round. -- Larger numbers will be rounded to a number with only one nonzero digit in front and all other digits zero. -- Negative sign is preserved and does not count towards word limit. local function round_for_english(num, round) -- If an integer with at most two digits, just return if num:find("^%-?%d?%d%.?$") then return num end local negative = num:find("^%-") if negative then -- We're rounding magnitude so flip it if round == 'up' then round = 'down' elseif round == 'down' then round = 'up' end end -- If at most two digits before decimal, round to integer and return local _, _, small_int, trailing_digits, round_digit = num:find("^%-?(%d?%d?)%.((%d)%d*)$") if small_int then if small_int == '' then small_int = '0' end if (round == 'up' and trailing_digits:find('[1-9]')) or (round == 'on' and tonumber(round_digit) >= 5) then small_int = tostring(tonumber(small_int) + 1) end return (negative and '-' or '') .. small_int end -- When rounding up, any number with > 1 nonzero digit will round up (e.g. 1000000.001 rounds up to 2000000) local nonzero_digits = 0 for digit in num:gfind("[1-9]") do nonzero_digits = nonzero_digits + 1 end num = num:gsub("%.%d*$", "") -- Remove decimal part -- Second digit used to determine which way to round lead digit local _, _, lead_digit, round_digit, round_digit_2, rest = num:find("^%-?(%d)(%d)(%d)(%d*)$") if tonumber(lead_digit .. round_digit) < 20 and (1 + #rest) % 3 == 0 then -- In English numbers < 20 are one word so put 2 digits in lead and round based on 3rd lead_digit = lead_digit .. round_digit round_digit = round_digit_2 else rest = round_digit_2 .. rest end if (round == 'up' and nonzero_digits > 1) or (round == 'on' and tonumber(round_digit) >= 5) then lead_digit = tostring(tonumber(lead_digit) + 1) end -- All digits but lead digit will turn to zero rest = rest:gsub("%d", "0") return (negative and '-' or '') .. lead_digit .. '0' .. rest end local denominators = { [2] = { 'yarım', plural = 'yarım' }, [3] = { 'üçüncü' }, [4] = { 'dördüncü', us = 'dördüncü' }, [5] = { 'beşinci' }, [6] = { 'altıncı' }, [8] = { 'sekizinci' }, [9] = { 'dokuzuncu' }, [10] = { 'onuncu' }, [16] = { 'on altıncı' }, } -- Return status, fraction where: -- status is a string: -- "finished" if there is a fraction with no whole number; -- "ok" if fraction is empty or valid; -- "unsupported" if bad fraction; -- fraction is a string giving (numerator / denominator) as English text, or is "". -- Only unsigned fractions with a very limited range of values are supported, -- except that if whole is empty, the numerator can use "-" to indicate negative. -- whole (string or nil): nil or "" if no number before the fraction -- numerator (string or nil): numerator, if any (default = 1 if a denominator is given) -- denominator (string or nil): denominator, if any -- sp_us (boolean): true if sp=us -- negative_word (string): word to use for negative sign, if whole is empty -- use_one (boolean): false: 2+1/2 → "two and a half"; true: "two and one-half" local function fraction_to_english(whole, numerator, denominator, sp_us, negative_word, use_one) if numerator or denominator then local finished = (whole == nil or whole == '') local sign = '' if numerator then if finished and numerator:sub(1, 1) == '-' then numerator = numerator:sub(2) sign = negative_word .. ' ' end else numerator = '1' end if not numerator:match('^%d+$') or not denominator or not denominator:match('^%d+$') then return 'unsupported', '' end numerator = tonumber(numerator) denominator = tonumber(denominator) local dendata = denominators[denominator] if not (dendata and 1 <= numerator and numerator <= 99) then return 'unsupported', '' end local numstr, denstr local sep = '-' if numerator == 1 then denstr = sp_us and dendata.us or dendata[1] if finished or use_one then numstr = 'one' elseif denstr:match('^[aeiou]') then numstr = 'an' sep = ' ' else numstr = 'a' sep = ' ' end else numstr = numeral_to_english_less_100(numerator) denstr = dendata.plural if not denstr then denstr = (sp_us and dendata.us or dendata[1]) .. 's' end end if finished then return 'finished', sign .. numstr .. sep .. denstr end return 'ok', ' and ' .. numstr .. sep .. denstr end return 'ok', '' end -- Takes a decimal number and converts it to English text. -- Return nil if a fraction cannot be converted (only some numbers are supported for fractions). -- num (string or nil): the number to convert. -- Can be an arbitrarily large decimal, such as "-123456789123456789.345", and -- can use scientific notation (e.g. "1.23E5"). -- May fail for very large numbers not listed in "groups" such as "1E4000". -- num is nil if there is no whole number before a fraction. -- numerator (string or nil): numerator of fraction (nil if no fraction) -- denominator (string or nil): denominator of fraction (nil if no fraction) -- capitalize (boolean): whether to capitalize the result (e.g. 'One' instead of 'one') -- use_and (boolean): whether to use the word 'and' between tens/ones place and higher places -- hyphenate (boolean): whether to hyphenate all words in the result, useful for use as an adjective -- ordinal (boolean): whether to produce an ordinal (e.g. 'first' instead of 'one') -- plural (boolean): whether to pluralize the resulting number -- links: nil: do not add any links; 'on': link "bilyon" and larger to Orders of magnitude article; -- any other text: list of numbers to link (e.g. "bilyon,quadrilyon") -- negative_word: word to use for negative sign (typically 'negative' or 'minus'; nil to use default) -- round: nil or '': no rounding; 'on': round to nearest two-word number; 'up'/'down': round up/down to two-word number -- zero: word to use for value '0' (nil to use default) -- use_one (boolean): false: 2+1/2 → "two and a half"; true: "two and one-half" local function _numeral_to_english(num, denominator, numerator, capitalize, use_and, hyphenate, ordinal, plural, links, negative_word, round, zero, use_one) if not negative_word then if use_and then -- TODO Should 'minus' be used when do not have sp=us? -- If so, need to update testcases, and need to fix "minus zero". -- negative_word = 'minus' negative_word = 'eksi' else negative_word = 'eksi' end end local status, fraction_text = fraction_to_english(num, numerator, denominator, not use_and, negative_word, use_one) if status == 'unsupported' then return nil end if status == 'finished' then -- Input is a fraction with no whole number. -- Hack to avoid executing stuff that depends on num being a number. local s = fraction_text if hyphenate then s = s:gsub("%s", "-") end if capitalize then s = s:gsub("^%l", string.upper) end return s end num = scientific_notation_to_decimal(num) if round and round ~= '' then if round ~= 'on' and round ~= 'up' and round ~= 'down' then error("Invalid rounding mode") end num = round_for_english(num, round) end -- Separate into negative sign, num (digits before decimal), decimal_places (digits after decimal) local MINUS = '−' -- Unicode U+2212 MINUS SIGN (may be in values from [[Module:Convert]]) if num:sub(1, #MINUS) == MINUS then num = '-' .. num:sub(#MINUS + 1) -- replace MINUS with '-' elseif num:sub(1, 1) == '+' then num = num:sub(2) -- ignore any '+' end local negative = num:find("^%-") local decimal_places, subs = num:gsub("^%-?%d*%.(%d+)$", "%1") if subs == 0 then decimal_places = nil end num, subs = num:gsub("^%-?(%d*)%.?%d*$", "%1") if num == '' and decimal_places then num = '0' end if subs == 0 or num == '' then error("Invalid decimal numeral") end -- For each group of 3 digits except the last one, print with appropriate group name (e.g. milyon) local s = '' while #num > 3 do if s ~= '' then s = s .. ' ' end local group_num = math.floor((#num - 1) / 3) local group = groups[group_num] local group_digits = #num - group_num*3 -- "1.000", "bin" özel durumu if num:sub(1, group_digits) == "1" and group_num == 1 then s = s .. "" else s = s .. numeral_to_english_less_1000(num:sub(1, group_digits), false, false, false, zero) end if group_num > 0 then if links and (((links == 'on' and group_num >= 3) or links:find(group)) and group_num <= 13) then s = s .. '[[Büyüklük_sıraları_(sayılar)#10' .. group_num*3 .. '|' .. group .. ']]' else s = s .. ' ' .. group end end num = num:sub(1 + group_digits) num = num:gsub("^0*", "") -- Trim leading zeros end -- Handle final three digits of integer part if s ~= '' and num ~= '' then if #num <= 2 and use_and then s = s .. ' ' else s = s .. ' ' end end if s == '' or num ~= '' then s = s .. numeral_to_english_less_1000(num, use_and, ordinal, plural, zero) elseif ordinal or plural then -- Round numbers like "one million" take standard suffixes for ordinal/plural s = s .. standard_suffix(ordinal, plural) end -- For decimal places (if any) output "point" followed by spelling out digit by digit if decimal_places then s = s .. ' onda' for i = 1, #decimal_places do s = s .. ' ' .. ones_position[tonumber(decimal_places:sub(i,i))] end end s = s:gsub("^%s*(.-)%s*$", "%1") -- Trim whitespace if ordinal and plural then s = s .. 's' end -- s suffix works for all ordinals if negative and s ~= zero then s = negative_word .. ' ' .. s end s = s:gsub("negative zero", "zero") s = s .. fraction_text if hyphenate then s = s:gsub("%s", "-") end if capitalize then s = s:gsub("^%l", string.upper) end return s end local function _numeral_to_english2(args) local num = tostring(args.num) num = num:gsub("^%s*(.-)%s*$", "%1") -- Trim whitespace num = num:gsub(",", "") -- Remove commas num = num:gsub("^<span[^<>]*></span>", "") -- Generated by Template:age if num ~= '' then -- a fraction may have an empty whole number if not num:find("^%-?%d*%.?%d*%-?[Ee]?[+%-]?%d*$") then -- Input not in a valid format, try to eval it as an expr to see -- if that produces a number (e.g. "3 + 5" will become "8"). local noerr, result = pcall(mw.ext.ParserFunctions.expr, num) if noerr then num = result end end end -- Call helper function passing args return _numeral_to_english( num, args['numerator'], args['denominator'], args['capitalize'], args['use_and'], args['hyphenate'], args['ordinal'], args['plural'], args['links'], args['negative_word'], args['round'], args['zero'], args['use_one'] ) or '' end local p = { -- Functions that can be called from another module roman_to_numeral = roman_to_numeral, spell_number = _numeral_to_english, spell_number2 = _numeral_to_english2, english_to_ordinal = english_to_ordinal, english_to_numeral = english_to_numeral, } function p._roman_to_numeral(frame) -- Callable via {{#invoke:DönüştürSayısal|_roman_to_numeral|VI}} return roman_to_numeral(frame.args[1]) end function p._english_to_ordinal(frame) -- callable via {{#invoke:DönüştürSayısal|_english_to_ordinal|First}} return english_to_ordinal(frame.args[1]) end function p._english_to_numeral(frame) -- callable via {{#invoke:DönüştürSayısal|_english_to_numeral|One}} return english_to_numeral(frame.args[1]) end function p.numeral_to_english(frame) local args = frame.args -- Tail call to helper function passing args from frame return _numeral_to_english2{ ['num'] = args[1], ['numerator'] = args['numerator'], ['denominator'] = args['denominator'], ['capitalize'] = args['case'] == 'U' or args['case'] == 'u', ['use_and'] = args['sp'] ~= 'us', ['hyphenate'] = args['adj'] == 'on', ['ordinal'] = args['ord'] == 'on', ['plural'] = args['pl'] == 'on', ['links'] = args['lk'], ['negative_word'] = args['negative'], ['round'] = args['round'], ['zero'] = args['zero'], ['use_one'] = args['one'] == 'one' -- experiment: using '|one=one' makes fraction 2+1/2 give "two and one-half" instead of "two and a half" } end ---- recursive function for p.decToHex local function decToHexDigit(dec) local dig = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"} local div = math.floor(dec/16) local mod = dec-(16*div) if div >= 1 then return decToHexDigit(div)..dig[mod+1] else return dig[mod+1] end end -- I think this is supposed to be done with a tail call but first I want something that works at all ---- finds all the decimal numbers in the input text and hexes each of them function p.decToHex(frame) local args=frame.args local parent=frame.getParent(frame) local pargs={} if parent then pargs=parent.args end local text=args[1] or pargs[1] or "" local minlength=args.minlength or pargs.minlength or 1 minlength=tonumber(minlength) local prowl=mw.ustring.gmatch(text,"(.-)(%d+)") local output="" repeat local chaff,dec=prowl() if not(dec) then break end local hex=decToHexDigit(dec) while (mw.ustring.len(hex)<minlength) do hex="0"..hex end output=output..chaff..hex until false local chaff=mw.ustring.match(text,"(%D+)$") or "" return output..chaff end return p
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Modul belgelemesi olustur Bu Scribunto modulu icin bir belgeleme sayfasi olusturmak isteyebilirsiniz Kullanicilar denemelerini bu sablonun deneme tahtasi olustur yansitma ve test senaryosu olustur sayfalarinda yapabilirler Lutfen kategorileri alt sayfasina ekleyin Bu modul ile ilgili alt sayfalar icin buraya tiklayiniz Sayilarin farkli temsilleri arasinda donusum yapmak icin kullanilan modul local ones position 0 sifir 1 bir 2 iki 3 uc 4 dort 5 bes 6 alti 7 yedi 8 sekiz 9 dokuz 10 on 11 on bir 12 on iki 13 on uc 14 on dort 15 on bes 16 on alti 17 on yedi 18 on sekiz 19 on dokuz local ones position ord 0 sifirinci 1 birinci 2 ikinci 3 ucuncu 4 dorduncu 5 besinci 6 altinci 7 yedinci 8 sekizinci 9 dokuzuncu 10 onuncu 11 onbirinci 12 onikinci 13 onucuncu 14 ondorduncu 15 onbesinci 16 onaltinci 17 onyedinci 18 onsekizinci 19 ondokuzuncu local ones position plural 0 sifirlar 1 birler 2 ikiler 3 ucler 4 dortler 5 besler 6 altilar 7 yediler 8 sekizler 9 dokuzlar 10 onlar 11 onbirler 12 onikiler 13 onucler 14 ondortler 15 onbesler 16 onaltilar 17 onyediler 18 onsekizler 19 ondokuzlar local tens position 2 yirmi 3 otuz 4 kirk 5 elli 6 altmis 7 yetmis 8 seksen 9 doksan local tens position ord 2 yirminci 3 otuzuncu 4 kirkinci 5 ellinci 6 altmisinci 7 yetmisinci 8 sekseninci 9 doksaninci local tens position plural 2 yirmiler 3 otuzlar 4 kirklar 5 elliler 6 altmislar 7 yetmisler 8 seksenler 9 doksanlar local groups 1 bin 2 milyon 3 milyar 4 trilyon 5 katrilyon 6 kentilyon 7 sekstilyon 8 septilyon 9 oktilyon 10 nonilyon 11 desilyon 12 undesilyon 13 duodesilyon 14 tredesilyon 15 quattuordecilyon 16 quindecilyon 17 sexdecilyon 18 septendecilyon 19 octodecilyon 20 novemdecilyon 21 vigintilyon 22 unvigintilyon 23 duovigintilyon 24 tresvigintilyon 25 quattuorvigintilyon 26 quinquavigintilyon 27 sesvigintilyon 28 septemvigintilyon 29 octovigintilyon 30 novemvigintilyon 31 trigintilyon 32 untrigintilyon 33 duotrigintilyon 34 trestrigintilyon 35 quattuortrigintilyon 36 quinquatrigintilyon 37 sestrigintilyon 38 septentrigintilyon 39 octotrigintilyon 40 noventrigintilyon 41 quadragintilyon 51 quinquagintilyon 61 sexagintilyon 71 septuagintilyon 81 octogintilyon 91 nonagintilyon 101 centilyon 102 uncentilyon 103 duocentilyon 104 trescentilyon 111 decicentilyon 112 undecicentilyon 121 viginticentilyon 122 unviginticentilyon 131 trigintacentilyon 141 quadragintacentilyon 151 quinquagintacentilyon 161 sexagintacentilyon 171 septuagintacentilyon 181 octogintacentilyon 191 nonagintacentilyon 201 ducentilyon 301 trecentilyon 401 quadringentilyon 501 quingentilyon 601 sescentilyon 701 septingentilyon 801 octingentilyon 901 nongentilyon 1001 millinilyon local roman numerals I 1 V 5 X 10 L 50 C 100 D 500 M 1000 Converts a given valid roman numeral and some invalid roman numerals to a number Returns 1 errorstring on error local function roman to numeral roman if type roman string then return 1 roman numeral not a string end local rev roman reverse local raising true local last 0 local result 0 for i 1 rev do local c rev sub i i local next roman numerals c if next nil then return 1 roman numeral contains illegal character c end if next gt last then result result next raising true elseif next lt last then result result next raising false elseif raising then result result next else result result next end last next end return result end Converts a given integer between 0 and 100 to English text e g 47 gt forty seven local function numeral to english less 100 num ordinal plural zero local terminal ones terminal tens if ordinal then terminal ones ones position ord terminal tens tens position ord elseif plural then terminal ones ones position plural terminal tens tens position plural else terminal ones ones position terminal tens tens position end if num 0 and zero nil then return zero elseif num lt 20 then return terminal ones num elseif num 10 0 then return terminal tens num 10 else return tens position math floor num 10 terminal ones num 10 end end local function standard suffix ordinal plural if ordinal then return end th if plural then return end s return end Converts a given integer in string form between 0 and 1000 to English text e g 47 gt forty seven local function numeral to english less 1000 num use and ordinal plural zero num tonumber num if num lt 100 then return numeral to english less 100 num ordinal plural zero elseif num 100 0 then local yuz ones position math floor num 100 if yuz bir then yuz end return yuz yuz standard suffix ordinal plural else local yuz ones position math floor num 100 if yuz bir then yuz end return yuz yuz use and and or numeral to english less 100 num 100 ordinal plural zero end end Converts a number expressed as a string in scientific notation to a string in standard decimal notation e g 1 23E5 gt 123000 1 23E 5 0000123 Conversion is exact no rounding is performed local function scientific notation to decimal num local exponent subs num gsub d d Ee d 1 if subs 0 then return num end Input not in scientific notation just return unmodified exponent tonumber exponent local negative num find local decimal pos num find Mantissa will consist of all decimal digits with no decimal point local mantissa num gsub d d Ee d 1 2 if negative and decimal pos then decimal pos decimal pos 1 end if not decimal pos then decimal pos mantissa 1 end Remove leading zeros unless decimal point is in first position while decimal pos gt 1 and mantissa sub 1 1 0 do mantissa mantissa sub 2 decimal pos decimal pos 1 end Shift decimal point right for exponent gt 0 while exponent gt 0 do decimal pos decimal pos 1 exponent exponent 1 if decimal pos gt mantissa 1 then mantissa mantissa 0 end Remove leading zeros unless decimal point is in first position while decimal pos gt 1 and mantissa sub 1 1 0 do mantissa mantissa sub 2 decimal pos decimal pos 1 end end Shift decimal point left for exponent lt 0 while exponent lt 0 do if decimal pos 1 then mantissa 0 mantissa else decimal pos decimal pos 1 end exponent exponent 1 end Insert decimal point in correct position and return return negative and or mantissa sub 1 decimal pos 1 mantissa sub decimal pos end Rounds a number to the nearest integer NOT USED local function round num x if x 1 gt 0 5 then return math ceil x else return math floor x end end Rounds a number to the nearest two word number round up down or on for round to nearest Numbers with two digits before the decimal will be rounded to an integer as specified by round Larger numbers will be rounded to a number with only one nonzero digit in front and all other digits zero Negative sign is preserved and does not count towards word limit local function round for english num round If an integer with at most two digits just return if num find d d then return num end local negative num find if negative then We re rounding magnitude so flip it if round up then round down elseif round down then round up end end If at most two digits before decimal round to integer and return local small int trailing digits round digit num find d d d d if small int then if small int then small int 0 end if round up and trailing digits find 1 9 or round on and tonumber round digit gt 5 then small int tostring tonumber small int 1 end return negative and or small int end When rounding up any number with gt 1 nonzero digit will round up e g 1000000 001 rounds up to 2000000 local nonzero digits 0 for digit in num gfind 1 9 do nonzero digits nonzero digits 1 end num num gsub d Remove decimal part Second digit used to determine which way to round lead digit local lead digit round digit round digit 2 rest num find d d d d if tonumber lead digit round digit lt 20 and 1 rest 3 0 then In English numbers lt 20 are one word so put 2 digits in lead and round based on 3rd lead digit lead digit round digit round digit round digit 2 else rest round digit 2 rest end if round up and nonzero digits gt 1 or round on and tonumber round digit gt 5 then lead digit tostring tonumber lead digit 1 end All digits but lead digit will turn to zero rest rest gsub d 0 return negative and or lead digit 0 rest end local denominators 2 yarim plural yarim 3 ucuncu 4 dorduncu us dorduncu 5 besinci 6 altinci 8 sekizinci 9 dokuzuncu 10 onuncu 16 on altinci Return status fraction where status is a string finished if there is a fraction with no whole number ok if fraction is empty or valid unsupported if bad fraction fraction is a string giving numerator denominator as English text or is Only unsigned fractions with a very limited range of values are supported except that if whole is empty the numerator can use to indicate negative whole string or nil nil or if no number before the fraction numerator string or nil numerator if any default 1 if a denominator is given denominator string or nil denominator if any sp us boolean true if sp us negative word string word to use for negative sign if whole is empty use one boolean false 2 1 2 two and a half true two and one half local function fraction to english whole numerator denominator sp us negative word use one if numerator or denominator then local finished whole nil or whole local sign if numerator then if finished and numerator sub 1 1 then numerator numerator sub 2 sign negative word end else numerator 1 end if not numerator match d or not denominator or not denominator match d then return unsupported end numerator tonumber numerator denominator tonumber denominator local dendata denominators denominator if not dendata and 1 lt numerator and numerator lt 99 then return unsupported end local numstr denstr local sep if numerator 1 then denstr sp us and dendata us or dendata 1 if finished or use one then numstr one elseif denstr match aeiou then numstr an sep else numstr a sep end else numstr numeral to english less 100 numerator denstr dendata plural if not denstr then denstr sp us and dendata us or dendata 1 s end end if finished then return finished sign numstr sep denstr end return ok and numstr sep denstr end return ok end Takes a decimal number and converts it to English text Return nil if a fraction cannot be converted only some numbers are supported for fractions num string or nil the number to convert Can be an arbitrarily large decimal such as 123456789123456789 345 and can use scientific notation e g 1 23E5 May fail for very large numbers not listed in groups such as 1E4000 num is nil if there is no whole number before a fraction numerator string or nil numerator of fraction nil if no fraction denominator string or nil denominator of fraction nil if no fraction capitalize boolean whether to capitalize the result e g One instead of one use and boolean whether to use the word and between tens ones place and higher places hyphenate boolean whether to hyphenate all words in the result useful for use as an adjective ordinal boolean whether to produce an ordinal e g first instead of one plural boolean whether to pluralize the resulting number links nil do not add any links on link bilyon and larger to Orders of magnitude article any other text list of numbers to link e g bilyon quadrilyon negative word word to use for negative sign typically negative or minus nil to use default round nil or no rounding on round to nearest two word number up down round up down to two word number zero word to use for value 0 nil to use default use one boolean false 2 1 2 two and a half true two and one half local function numeral to english num denominator numerator capitalize use and hyphenate ordinal plural links negative word round zero use one if not negative word then if use and then TODO Should minus be used when do not have sp us If so need to update testcases and need to fix minus zero negative word minus negative word eksi else negative word eksi end end local status fraction text fraction to english num numerator denominator not use and negative word use one if status unsupported then return nil end if status finished then Input is a fraction with no whole number Hack to avoid executing stuff that depends on num being a number local s fraction text if hyphenate then s s gsub s end if capitalize then s s gsub l string upper end return s end num scientific notation to decimal num if round and round then if round on and round up and round down then error Invalid rounding mode end num round for english num round end Separate into negative sign num digits before decimal decimal places digits after decimal local MINUS Unicode U 2212 MINUS SIGN may be in values from Module Convert if num sub 1 MINUS MINUS then num num sub MINUS 1 replace MINUS with elseif num sub 1 1 then num num sub 2 ignore any end local negative num find local decimal places subs num gsub d d 1 if subs 0 then decimal places nil end num subs num gsub d d 1 if num and decimal places then num 0 end if subs 0 or num then error Invalid decimal numeral end For each group of 3 digits except the last one print with appropriate group name e g milyon local s while num gt 3 do if s then s s end local group num math floor num 1 3 local group groups group num local group digits num group num 3 1 000 bin ozel durumu if num sub 1 group digits 1 and group num 1 then s s else s s numeral to english less 1000 num sub 1 group digits false false false zero end if group num gt 0 then if links and links on and group num gt 3 or links find group and group num lt 13 then s s Buyukluk siralari sayilar 10 group num 3 group else s s group end end num num sub 1 group digits num num gsub 0 Trim leading zeros end Handle final three digits of integer part if s and num then if num lt 2 and use and then s s else s s end end if s or num then s s numeral to english less 1000 num use and ordinal plural zero elseif ordinal or plural then Round numbers like one million take standard suffixes for ordinal plural s s standard suffix ordinal plural end For decimal places if any output point followed by spelling out digit by digit if decimal places then s s onda for i 1 decimal places do s s ones position tonumber decimal places sub i i end end s s gsub s s 1 Trim whitespace if ordinal and plural then s s s end s suffix works for all ordinals if negative and s zero then s negative word s end s s gsub negative zero zero s s fraction text if hyphenate then s s gsub s end if capitalize then s s gsub l string upper end return s end local function numeral to english2 args local num tostring args num num num gsub s s 1 Trim whitespace num num gsub Remove commas num num gsub lt span lt gt gt lt span gt Generated by Template age if num then a fraction may have an empty whole number if not num find d d Ee d then Input not in a valid format try to eval it as an expr to see if that produces a number e g 3 5 will become 8 local noerr result pcall mw ext ParserFunctions expr num if noerr then num result end end end Call helper function passing args return numeral to english num args numerator args denominator args capitalize args use and args hyphenate args ordinal args plural args links args negative word args round args zero args use one or end local p Functions that can be called from another module roman to numeral roman to numeral spell number numeral to english spell number2 numeral to english2 english to ordinal english to ordinal english to numeral english to numeral function p roman to numeral frame Callable via invoke DonusturSayisal roman to numeral VI return roman to numeral frame args 1 end function p english to ordinal frame callable via invoke DonusturSayisal english to ordinal First return english to ordinal frame args 1 end function p english to numeral frame callable via invoke DonusturSayisal english to numeral One return english to numeral frame args 1 end function p numeral to english frame local args frame args Tail call to helper function passing args from frame return numeral to english2 num args 1 numerator args numerator denominator args denominator capitalize args case U or args case u use and args sp us hyphenate args adj on ordinal args ord on plural args pl on links args lk negative word args negative round args round zero args zero use one args one one experiment using one one makes fraction 2 1 2 give two and one half instead of two and a half end recursive function for p decToHex local function decToHexDigit dec local dig 0 1 2 3 4 5 6 7 8 9 A B C D E F local div math floor dec 16 local mod dec 16 div if div gt 1 then return decToHexDigit div dig mod 1 else return dig mod 1 end end I think this is supposed to be done with a tail call but first I want something that works at all finds all the decimal numbers in the input text and hexes each of them function p decToHex frame local args frame args local parent frame getParent frame local pargs if parent then pargs parent args end local text args 1 or pargs 1 or local minlength args minlength or pargs minlength or 1 minlength tonumber minlength local prowl mw ustring gmatch text d local output repeat local chaff dec prowl if not dec then break end local hex decToHexDigit dec while mw ustring len hex lt minlength do hex 0 hex end output output chaff hex until false local chaff mw ustring match text D or return output chaff end return p