This module contains data on various types of numbers in อิตาลี.

จำนวน เชิงการนับ เชิงอันดับที่ ตัวย่อเชิงอันดับที่ เชิงกริยาวิเศษณ์ ตัวคูณ เชิงแจกแจง เชิงรวบรวม เศษส่วน (⅟…) Wikipedia link
0 zero zeresimo mai nullo nessuno 0 (numero)
1 uno, un primo una volta singolo singolarmente 1 (numero)
2 due secondo due volte doppio, duplice doppiamente entrambi, tutti e due mezzo 2 (numero)
3 tre terzo tre volte triplo, triplice tutti e tre terzo 3 (numero)
4 quattro quarto quattro volte quadruplo tutti e quattro quarto 4 (numero)
5 cinque quinto cinque volte quintuplo tutti e cinque quinto 5 (numero)
6 sei sesto sei volte sestuplo tutti e sei sesto 6 (numero)
7 sette settimo sette volte settuplo tutti e sette settimo 7 (numero)
8 otto ottavo otto volte ottuplo tutti e otto ottavo 8 (numero)
9 nove nono nove volte nonuplo tutti e nove nono 9 (numero)
10 dieci decimo 10º dieci volte decuplo tutti e dieci decimo 10 (numero)
11 undici undicesimo 11º 11 (numero)
12 dodici dodicesimo 12º 12 (numero)
13 tredici tredicesimo 13º 13 (numero)
14 quattordici quattordicesimo 14º 14 (numero)
15 quindici quindicesimo 15º 15 (numero)
16 sedici sedicesimo 16º 16 (numero)
17 diciassette diciassettesimo 17º 17 (numero)
18 diciotto diciottesimo 18º 18 (numero)
19 diciannove diciannovesimo 19º 19 (numero)
20 venti ventesimo 20º 20 (numero)
21 ventuno ventunesimo 21º 21 (numero)
22 ventidue ventiduesimo 22º 22 (numero)
23 ventitré ventitreesimo 23º 23 (numero)
24 ventiquattro ventiquattresimo 24º 24 (numero)
25 venticinque venticinquesimo 25º 25 (numero)
26 ventisei ventiseiesimo 26º 26 (numero)
27 ventisette ventisettesimo 27º 27 (numero)
28 ventotto ventottesimo 28º 28 (numero)
29 ventinove ventinovesimo 29º 29 (numero)
30 trenta trentesimo 30º 30 (numero)
31 trentuno trentunesimo 31º 31 (numero)
32 trentadue trentaduesimo 32º 32 (numero)
33 trentatré trentatreesimo 33º 33 (numero)
34 trentaquattro trentaquattresimo 34º 34 (numero)
35 trentacinque trentacinquesimo 35º 35 (numero)
36 trentasei trentaseiesimo 36º 36 (numero)
37 trentasette trentasettesimo 37º 37 (numero)
38 trentotto trentottesimo 38º 38 (numero)
39 trentanove trentanovesimo 39º 39 (numero)
40 quaranta quarantesimo 40º 40 (numero)
41 quarantuno quarantunesimo 41º 41 (numero)
42 quarantadue quarantaduesimo 42º 42 (numero)
43 quarantatré quarantatreesimo 43º 43 (numero)
44 quarantaquattro quarantaquattresimo 44º 44 (numero)
45 quarantacinque quarantacinquesimo 45º 45 (numero)
46 quarantasei quarantaseiesimo 46º 46 (numero)
47 quarantasette quarantasettesimo 47º 47 (numero)
48 quarantotto quarantottesimo 48º 48 (numero)
49 quarantanove quarantanovesimo 49º 49 (numero)
50 cinquanta cinquantesimo 50º 50 (numero)
51 cinquantuno cinquantunesimo 51º 51 (numero)
52 cinquantadue cinquantaduesimo 52º 52 (numero)
53 cinquantatré cinquantatreesimo 53º 53 (numero)
54 cinquantaquattro cinquantaquattresimo 54º 54 (numero)
55 cinquantacinque cinquantacinquesimo 55º 55 (numero)
56 cinquantasei cinquantaseiesimo 56º 56 (numero)
57 cinquantasette cinquantasettesimo 57º 57 (numero)
58 cinquantotto cinquantottesimo 58º 58 (numero)
59 cinquantanove cinquantanovesimo 59º 59 (numero)
60 sessanta sessantesimo 60º 60 (numero)
61 sessantuno sessantunesimo 61º 61 (numero)
62 sessantadue sessantaduesimo 62º 62 (numero)
63 sessantatré sessantatreesimo 63º 63 (numero)
64 sessantaquattro sessantaquattresimo 64º 64 (numero)
65 sessantacinque sessantacinquesimo 65º 65 (numero)
66 sessantasei sessantaseiesimo 66º 66 (numero)
67 sessantasette sessantasettesimo 67º 67 (numero)
68 sessantotto sessantottesimo 68º 68 (numero)
69 sessantanove sessantanovesimo 69º 69 (numero)
70 settanta settantesimo 70º 70 (numero)
71 settantuno settantunesimo 71º 71 (numero)
72 settantadue settantaduesimo 72º 72 (numero)
73 settantatré settantatreesimo 73º 73 (numero)
74 settantaquattro settantaquattresimo 74º 74 (numero)
75 settantacinque settantacinquesimo 75º 75 (numero)
76 settantasei settantaseiesimo 76º 76 (numero)
77 settantasette settantasettesimo 77º 77 (numero)
78 settantotto settantottesimo 78º 78 (numero)
79 settantanove settantanovesimo 79º 79 (numero)
80 ottanta ottantesimo 80º 80 (numero)
81 ottantuno ottantunesimo 81º 81 (numero)
82 ottantadue ottantaduesimo 82º 82 (numero)
83 ottantatré ottantatreesimo 83º 83 (numero)
84 ottantaquattro ottantaquattresimo 84º 84 (numero)
85 ottantacinque ottantacinquesimo 85º 85 (numero)
86 ottantasei ottantaseiesimo 86º 86 (numero)
87 ottantasette ottantasettesimo 87º 87 (numero)
88 ottantotto ottantottesimo 88º 88 (numero)
89 ottantanove ottantanovesimo 89º 89 (numero)
90 novanta novantesimo 90º 90 (numero)
91 novantuno novantunesimo 91º 91 (numero)
92 novantadue novantaduesimo 92º 92 (numero)
93 novantatré novantatreesimo 93º 93 (numero)
94 novantaquattro novantaquattresimo 94º 94 (numero)
95 novantacinque novantacinquesimo 95º 95 (numero)
96 novantasei novantaseiesimo 96º 96 (numero)
97 novantasette novantasettesimo 97º 97 (numero)
98 novantotto novantottesimo 98º 98 (numero)
99 novantanove novantanovesimo 99º 99 (numero)
100 cento centesimo 100º 100 (numero)
101 centouno, centuno centounesimo, centunesimo 101º 101 (numero)
102 centodue centoduesimo 102º 102 (numero)
103 centotré, centotre centotreesimo, centotreesimo 103º 103 (numero)
104 centoquattro centoquattresimo 104º 104 (numero)
105 centocinque centocinquesimo 105º 105 (numero)
106 centosei centoseiesimo 106º 106 (numero)
107 centosette centosettesimo 107º 107 (numero)
108 centootto, centotto centoottesimo, centottesimo 108º 108 (numero)
109 centonove centonovesimo 109º 109 (numero)
110 centodieci centodecimo 110º 110 (numero)
111 centoundici centoundicesimo 111º 111 (numero)
112 centododici centododicesimo 112º 112 (numero)
113 centotredici centotredicesimo 113º 113 (numero)
114 centoquattordici centoquattordicesimo 114º 114 (numero)
115 centoquindici centoquindicesimo 115º 115 (numero)
116 centosedici centosedicesimo 116º 116 (numero)
117 centodiciassette centodiciassettesimo 117º 117 (numero)
118 centodiciotto centodiciottesimo 118º 118 (numero)
119 centodiciannove centodiciannovesimo 119º 119 (numero)
120 centoventi centoventesimo 120º 120 (numero)
130 centotrenta centotrentesimo 130º 130 (numero)
140 centoquaranta centoquarantesimo 140º 140 (numero)
150 centocinquanta centocinquantesimo 150º 150 (numero)
160 centosessanta centosessantesimo 160º 160 (numero)
170 centosettanta centosettantesimo 170º 170 (numero)
180 centottanta centottantesimo 180º 180 (numero)
190 centonovanta centonovantesimo 190º 190 (numero)
200 duecento duecentesimo 200º 200 (numero)
210 duecentodieci duecentodecimo 210º 210 (numero)
300 trecento trecentesimo 300º 300 (numero)
400 quattrocento quattrocentesimo 400º 400 (numero)
500 cinquecento cinquecentesimo 500º 500 (numero)
600 seicento seicentesimo 600º 600 (numero)
700 settecento settecentesimo 700º 700 (numero)
800 ottocento ottocentesimo 800º 800 (numero)
900 novecento novecentesimo 900º 900 (numero)
1,000 mille millesimo 1000º 1000 (numero)
1,001 milleuno milleunesimo 1001º 1001 (numero)
2,000 duemila duemillesimo 2000º 2000 (numero)
3,000 tremila tremillesimo 3000º
4,000 quattromila quattromillesimo 4000º
5,000 cinquemila cinquemillesimo 5000º
6,000 seimila seimillesimo 6000º
7,000 settemila settemillesimo 7000º
8,000 ottomila ottomillesimo 8000º
9,000 novemila novemillesimo 9000º
10,000 diecimila decimillesimo, diecimillesimo 10.000º
100,000 centomila centomillesimo 100.000º
1,000,000 (106) un milione, unmilione milionesimo 1.000.000º milione
2,000,000 (2 × 106) due milioni, duemilioni duemilionesimo 2.000.000º
10,000,000 (107) dieci milioni, diecimilioni decimilionesimo, diecimilionesimo 10.000.000º
100,000,000 (108) cento milioni, centomilioni centomilionesimo 100.000.000º
1,000,000,000 (109) un miliardo, unmiliardo miliardesimo miliardo
2,000,000,000 (2 × 109) due miliardi, duemiliardi duemiliardesimo
10,000,000,000 (1010) dieci miliardi, diecimiliardi decimiliardesimo, diecimiliardesimo
100,000,000,000 (1011) cento miliardi, centomiliardi centomiliardesimo
1012 un bilione, unbilione bilionesimo bilione
1013 dieci bilioni, diecibilioni decibilionesimo, diecibilionesimo
1014 cento bilioni, centobilioni centobilionesimo
1015 un biliardo, unbiliardo biliardesimo biliardo (numero)
1018 un trilione, untrilione trilionesimo trilione
1021 un triliardo, untriliardo triliardesimo triliardo
1024 un quadrilione, unquadrilione quadrilionesimo quadrilione
1027 un quadriliardo, unquadriliardo quadriliardesimo quadriliardo
1030 un quintilione, unquintilione quintilionesimo quintilione
1033 un quintiliardo, unquintiliardo quintiliardesimo

local export = {numbers = {}}

local m_numutils = require("Module:number list/utils")
local power_of = m_numutils.power_of

local numbers = export.numbers

local rfind = mw.ustring.find
local rsubn = mw.ustring.gsub

-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
	local retval = rsubn(term, foo, bar)
	return retval
end

numbers[0] = {
	cardinal = "zero",
	ordinal = "zeresimo",
	ordinal_abbr = "0º",
	adverbial = "[[mai]]",
	multiplier = "nullo",
	collective = "nessuno",
	wplink = "0 (numero)",
}

numbers[1] = {
	cardinal = {"uno", "un"},
	ordinal = "primo",
	ordinal_abbr = "1º",
	adverbial = "[[una]] [[volta]]",
	multiplier = "singolo",
	distributive = "singolarmente",
	wplink = "1 (numero)",
}

numbers[2] = {
	cardinal = "due",
	ordinal = "secondo",
	ordinal_abbr = "2º",
	adverbial = "[[due]] [[volta|volte]]",
	multiplier = {"doppio", "duplice"},
	distributive = "doppiamente",
	collective = {"entrambi", "[[tutti e]] [[due]]"},
	fractional = "mezzo",
	wplink = "2 (numero)",
}

-- From 3 to 10, we automatically generate the ordinal abbreviation, adverbial, collective, fractional and wplink entries.
numbers[3] = {
	cardinal = "tre",
	ordinal = "terzo",
	multiplier = {"triplo", "triplice"},
}

numbers[4] = {
	cardinal = "quattro",
	ordinal = "quarto",
	multiplier = "quadruplo",
}

numbers[5] = {
	cardinal = "cinque",
	ordinal = "quinto",
	multiplier = "quintuplo",
}

numbers[6] = {
	cardinal = "sei",
	ordinal = "sesto",
	multiplier = "sestuplo",
}

numbers[7] = {
	cardinal = "sette",
	ordinal = "settimo",
	multiplier = "settuplo",
}

numbers[8] = {
	cardinal = "otto",
	ordinal = "ottavo",
	multiplier = "ottuplo",
}

numbers[9] = {
	cardinal = "nove",
	ordinal = "nono",
	multiplier = "nonuplo",
}

numbers[10] = {
	cardinal = "dieci",
	ordinal = "decimo",
	multiplier = "decuplo",
}

for i = 3, 10 do
	local cardinal = numbers[i].cardinal
	numbers[i].ordinal_abbr = i .. "º"
	numbers[i].adverbial = ("[[%s]] [[volta|volte]]"):format(cardinal)
	numbers[i].collective = ("[[tutti e]] [[%s]]"):format(cardinal)
	numbers[i].fractional = numbers[i].ordinal
	numbers[i].wplink = ("%s (numero)"):format(i)
end

local function add_ordinal_suffix(term)
	if type(term) == "table" then
		local ordinals = {}
		for _, item in ipairs(term) do
			table.insert(ordinals, add_ordinal_suffix(item))
		end
		return ordinals
	end
	if rfind(term, "tre$") or rfind(term, "sei$") then
		return term .. "esimo"
	elseif rfind(term, "tré$") then
		return rsub(term, "tré$", "treesimo")
	elseif rfind(term, "dieci$") then
		return rsub(term, "dieci$", "decimo")
	elseif rfind(term, "mila$") then
		return rsub(term, "mila$", "millesimo")
	else
		return rsub(term, "[aeiou]$", "") .. "esimo"
	end
end

local function make_number(num, cardinal, ordinal, wplink)
	local numstr = m_numutils.format_fixed(num)
	numbers[num] = {
		cardinal = cardinal,
		ordinal = ordinal or add_ordinal_suffix(cardinal),
		ordinal_abbr = #numstr < 10 and m_numutils.add_thousands_separator(numstr, ".") .. "º" or nil,
		wplink = wplink or type(num) == "number" and num <= 2000 and num .. " (numero)" or nil,
	}
end

-- Generate 11 through 19.
for i, teen in ipairs { "undici", "dodici", "tredici", "quattordici", "quindici", "sedici",
	"diciassette", "diciotto", "diciannove", } do
	make_number(i + 10, teen)
end

-- Generate 20 through 99.
for i, tens_cardinal in ipairs {
	"venti", "trenta", "quaranta", "cinquanta", "sessanta",
	"settanta", "ottanta", "novanta",
} do
	local tens = (i + 1) * 10
	make_number(tens, tens_cardinal)
	for ones = 1, 9 do
		local suffix = ones == 3 and "tré" or numbers[ones].cardinal
		if type(suffix) == "table" then
			suffix = suffix[1] -- {"uno", "un"}
		end

		local cardinal =
			(suffix:find "^[aeiou]" and tens_cardinal:gsub("%f[aeiou][aeiou]$", "")
				or tens_cardinal)
			.. suffix
		make_number(tens + ones, cardinal)
	end
end

-- Generate 100 through 108.
for i, hundred_item in ipairs {
	"cento",
	{"centouno", "centuno"},
	"centodue",
	{"centotré", "centotre"},
	"centoquattro",
	"centocinque",
	"centosei",
	"centosette",
	{"centootto", "centotto"},
} do
	make_number(i + 99, hundred_item)
end

-- Generate 109 through 119.
for i = 109, 119 do
	local base = i - 100
	local cardinal = "cento" .. numbers[base].cardinal
	make_number(i, cardinal)
end

-- Generate 120 through 190 by 10.
for i = 120, 190, 10 do
	local base = i - 100
	local cardinal = i == 180 and "centottanta" or "cento" .. numbers[base].cardinal
	make_number(i, cardinal)
end

-- Generate 200 through 900 by 100.
for i = 200, 900, 100 do
	local base = i / 100
	local cardinal = numbers[base].cardinal .. "cento"
	make_number(i, cardinal)
end

-- Include 210 because of the irregular ordinal (duecentodecimo).
make_number(210, "duecentodieci")

make_number(1000, "mille")
make_number(1001, "milleuno")

-- Generate 2000 through 9000 by 1000.
for i = 2000, 9000, 1000 do
	local base = i / 1000
	local cardinal = numbers[base].cardinal .. "mila"
	make_number(i, cardinal)
end

make_number(10000, "diecimila", {"decimillesimo", "diecimillesimo"})
make_number(100000, "centomila")
make_number(1000000, {"[[un]] [[milione]]<link:milione>", "unmilione"}, "milionesimo", "milione")
make_number(2000000, {"[[due]] [[milione|milioni]]", "duemilioni"}, "duemilionesimo")
make_number(power_of(7), {"[[dieci]] [[milione|milioni]]", "diecimilioni"}, {"decimilionesimo", "diecimilionesimo"})
make_number(power_of(8), {"[[cento]] [[milione|milioni]]", "centomilioni"}, "centomilionesimo")
make_number(power_of(9), {"[[un]] [[miliardo]]<link:miliardo>", "unmiliardo"}, "miliardesimo", "miliardo")
make_number(power_of(9, 2), {"[[due]] [[miliardo|miliardi]]", "duemiliardi"}, "duemiliardesimo")
make_number(power_of(10), {"[[dieci]] [[miliardo|miliardi]]", "diecimiliardi"}, {"decimiliardesimo", "diecimiliardesimo"})
make_number(power_of(11), {"[[cento]] [[miliardo|miliardi]]", "centomiliardi"}, "centomiliardesimo")
make_number(power_of(12), {"[[un]] [[bilione]]<link:bilione>", "unbilione"}, "bilionesimo", "bilione")
make_number(power_of(13), {"[[dieci]] [[bilione|bilioni]]", "diecibilioni"}, {"decibilionesimo", "diecibilionesimo"})
make_number(power_of(14), {"[[cento]] [[bilione|bilioni]]", "centobilioni"}, "centobilionesimo")
make_number(power_of(15), {"[[un]] [[biliardo]]<link:biliardo>", "unbiliardo"}, "biliardesimo", "biliardo (numero)")
make_number(power_of(18), {"[[un]] [[trilione]]<link:trilione>", "untrilione"}, "trilionesimo", "trilione")
make_number(power_of(21), {"[[un]] [[triliardo]]<link:triliardo>", "untriliardo"}, "triliardesimo", "triliardo")
make_number(power_of(24), {"[[un]] [[quadrilione]]<link:quadrilione>", "unquadrilione"}, "quadrilionesimo", "quadrilione")
make_number(power_of(27), {"[[un]] [[quadriliardo]]<link:quadriliardo>", "unquadriliardo"}, "quadriliardesimo", "quadriliardo")
make_number(power_of(30), {"[[un]] [[quintilione]]<link:quintilione>", "unquintilione"}, "quintilionesimo", "quintilione")
make_number(power_of(33), {"[[un]] [[quintiliardo]]<link:quintiliardo>", "unquintiliardo"}, "quintiliardesimo") -- no 'quintiliardo' article yet

return export