This module contains data on various types of numbers in โปรตุเกส.

จำนวน เชิงการนับ เชิงอันดับที่ ตัวย่อเชิงอันดับที่ ตัวคูณ เศษส่วน (⅟…) Group Wikipedia link
0 zero zerésimo 0.º 0 (número)
1 um primeiro 1.º único, singular um
2 dois segundo 2.º dobro, duplo meio, metade dupla, par, duo dois
3 três terceiro 3.º triplo, tríplice terço trio, trinca, terceto, tríade três
4 quatro quarto 4.º quádruplo quarto quarteto quatro
5 cinco quinto 5.º quíntuplo quinto quinteto cinco
6 seis sexto 6.º sêxtuplo sexto sexteto seis
7 sete sétimo 7.º sétuplo, séptuplo sétimo septeto sete
8 oito oitavo 8.º óctuplo oitavo octeto oito
9 nove nono, noveno 9.º Brazil: nônuplo
Portugal: nónuplo
nono, noveno noneto nove
10 dez décimo 10.º décuplo décimo dez
11 onze décimo primeiro, undécimo 11.º undécuplo undécimo, onze avos
12 doze décimo segundo, duodécimo 12.º duodécuplo duodécimo, doze avos
13 treze décimo terceiro 13.º treze avos treze
14 catorze, quatorze décimo quarto 14.º catorze avos, quatorze avos catorze
15 quinze décimo quinto 15.º quinze avos
16 Brazil: dezesseis
Portugal: dezasseis
décimo sexto 16.º Brazil: dezesseis avos
Portugal: dezasseis avos
17 Brazil: dezessete
Portugal: dezassete
décimo sétimo 17.º Brazil: dezessete avos
Portugal: dezassete avos
17 (número)
18 dezoito décimo oitavo 18.º dezoito avos dezoito
19 Brazil: dezenove
Portugal: dezanove
décimo nono 19.º Brazil: dezenove avos
Portugal: dezanove avos
20 vinte vigésimo 20.º vigésimo, vinte avos
21 vinte e um vigésimo primeiro 21.º vinte e um avos
22 vinte e dois vigésimo segundo 22.º vinte e dois avos
23 vinte e três vigésimo terceiro 23.º vinte e três avos vinte
24 vinte e quatro vigésimo quarto 24.º vinte e quatro avos
25 vinte e cinco vigésimo quinto 25.º vinte e cinco avos vinte
26 vinte e seis vigésimo sexto 26.º vinte e seis avos
27 vinte e sete vigésimo sétimo 27.º vinte e sete avos
28 vinte e oito vigésimo oitavo 28.º vinte e oito avos
29 vinte e nove vigésimo nono 29.º vinte e nove avos
30 trinta trigésimo 30.º trigésimo, trinta avos trinta
31 trinta e um trigésimo primeiro 31.º trinta e um avos
32 trinta e dois trigésimo segundo 32.º trinta e dois avos
33 trinta e três trigésimo terceiro 33.º trinta e três avos
34 trinta e quatro trigésimo quarto 34.º trinta e quatro avos
35 trinta e cinco trigésimo quinto 35.º trinta e cinco avos trinta
36 trinta e seis trigésimo sexto 36.º trinta e seis avos trinta
37 trinta e sete trigésimo sétimo 37.º trinta e sete avos trinta
38 trinta e oito trigésimo oitavo 38.º trinta e oito avos
39 trinta e nove trigésimo nono 39.º trinta e nove avos
40 quarenta quadragésimo 40.º quadragésimo, quarenta avos
41 quarenta e um quadragésimo primeiro 41.º quarenta e um avos
42 quarenta e dois quadragésimo segundo 42.º quarenta e dois avos
43 quarenta e três quadragésimo terceiro 43.º quarenta e três avos
44 quarenta e quatro quadragésimo quarto 44.º quarenta e quatro avos
45 quarenta e cinco quadragésimo quinto 45.º quarenta e cinco avos
46 quarenta e seis quadragésimo sexto 46.º quarenta e seis avos
47 quarenta e sete quadragésimo sétimo 47.º quarenta e sete avos
48 quarenta e oito quadragésimo oitavo 48.º quarenta e oito avos
49 quarenta e nove quadragésimo nono 49.º quarenta e nove avos
50 cinquenta quinquagésimo 50.º quinquagésimo, cinquenta avos
51 cinquenta e um quinquagésimo primeiro 51.º cinquenta e um avos
52 cinquenta e dois quinquagésimo segundo 52.º cinquenta e dois avos
53 cinquenta e três quinquagésimo terceiro 53.º cinquenta e três avos
54 cinquenta e quatro quinquagésimo quarto 54.º cinquenta e quatro avos
55 cinquenta e cinco quinquagésimo quinto 55.º cinquenta e cinco avos
56 cinquenta e seis quinquagésimo sexto 56.º cinquenta e seis avos
57 cinquenta e sete quinquagésimo sétimo 57.º cinquenta e sete avos
58 cinquenta e oito quinquagésimo oitavo 58.º cinquenta e oito avos
59 cinquenta e nove quinquagésimo nono 59.º cinquenta e nove avos
60 sessenta sexagésimo 60.º sexagésimo, sessenta avos
61 sessenta e um sexagésimo primeiro 61.º sessenta e um avos
62 sessenta e dois sexagésimo segundo 62.º sessenta e dois avos
63 sessenta e três sexagésimo terceiro 63.º sessenta e três avos
64 sessenta e quatro sexagésimo quarto 64.º sessenta e quatro avos
65 sessenta e cinco sexagésimo quinto 65.º sessenta e cinco avos
66 sessenta e seis sexagésimo sexto 66.º sessenta e seis avos
67 sessenta e sete sexagésimo sétimo 67.º sessenta e sete avos
68 sessenta e oito sexagésimo oitavo 68.º sessenta e oito avos
69 sessenta e nove sexagésimo nono 69.º sessenta e nove avos
70 setenta septuagésimo, setuagésimo 70.º septuagésimo, setuagésimo, setenta avos
71 setenta e um septuagésimo primeiro, setuagésimo primeiro 71.º setenta e um avos
72 setenta e dois septuagésimo segundo, setuagésimo segundo 72.º setenta e dois avos
73 setenta e três septuagésimo terceiro, setuagésimo terceiro 73.º setenta e três avos
74 setenta e quatro septuagésimo quarto, setuagésimo quarto 74.º setenta e quatro avos
75 setenta e cinco septuagésimo quinto, setuagésimo quinto 75.º setenta e cinco avos
76 setenta e seis septuagésimo sexto, setuagésimo sexto 76.º setenta e seis avos
77 setenta e sete septuagésimo sétimo, setuagésimo sétimo 77.º setenta e sete avos
78 setenta e oito septuagésimo oitavo, setuagésimo oitavo 78.º setenta e oito avos
79 setenta e nove septuagésimo nono, setuagésimo nono 79.º setenta e nove avos
80 oitenta octogésimo 80.º octogésimo, oitenta avos
81 oitenta e um octogésimo primeiro 81.º oitenta e um avos
82 oitenta e dois octogésimo segundo 82.º oitenta e dois avos
83 oitenta e três octogésimo terceiro 83.º oitenta e três avos
84 oitenta e quatro octogésimo quarto 84.º oitenta e quatro avos
85 oitenta e cinco octogésimo quinto 85.º oitenta e cinco avos
86 oitenta e seis octogésimo sexto 86.º oitenta e seis avos
87 oitenta e sete octogésimo sétimo 87.º oitenta e sete avos
88 oitenta e oito octogésimo oitavo 88.º oitenta e oito avos
89 oitenta e nove octogésimo nono 89.º oitenta e nove avos
90 noventa nonagésimo 90.º nonagésimo, noventa avos
91 noventa e um nonagésimo primeiro 91.º noventa e um avos
92 noventa e dois nonagésimo segundo 92.º noventa e dois avos
93 noventa e três nonagésimo terceiro 93.º noventa e três avos
94 noventa e quatro nonagésimo quarto 94.º noventa e quatro avos
95 noventa e cinco nonagésimo quinto 95.º noventa e cinco avos
96 noventa e seis nonagésimo sexto 96.º noventa e seis avos
97 noventa e sete nonagésimo sétimo 97.º noventa e sete avos
98 noventa e oito nonagésimo oitavo 98.º noventa e oito avos
99 noventa e nove nonagésimo nono 99.º noventa e nove avos
100 (alone or followed by a noun or higher numeral) cem, (followed by a lower numeral) cento centésimo 100.º cêntuplo centésimo, cem avos
200 duzentos ducentésimo 200.º ducentésimo, duzentos avos
300 trezentos trecentésimo, tricentésimo 300.º trecentésimo, tricentésimo, trezentos avos
400 quatrocentos quadringentésimo 400.º quadringentésimo, quatrocentos avos
500 quinhentos quingentésimo 500.º quingentésimo, quinhentos avos quinhentos
600 seiscentos sexcentésimo, seiscentésimo 600.º sexcentésimo, seiscentésimo, seiscentos avos seiscentos
700 setecentos septingentésimo, setingentésimo 700.º septingentésimo, setingentésimo, setecentos avos setecentos
800 oitocentos octingentésimo 800.º octingentésimo, oitocentos avos
900 novecentos noningentésimo, nongentésimo 900.º noningentésimo, nongentésimo, novecentos avos novecentos
1,000 mil milésimo 1000.º milésimo, mil avos
10,000 dez mil décimo milésimo, décimo de milésimo 10.000.º décimo milésimo, décimo de milésimo, dez mil avos dez mil
100,000 cem mil centésimo milésimo, centésimo de milésimo 100.000.º centésimo milésimo, centésimo de milésimo, cem mil avos
1,000,000 (106) um milhão milionésimo 1.000.000.º milionésimo, um milhão avos milhão
10,000,000 (107) dez milhões décimo milionésimo, décimo de milionésimo 10.000.000.º décimo milionésimo, décimo de milionésimo, dez milhões avos
100,000,000 (108) cem milhões centésimo milionésimo, centésimo de milionésimo 100.000.000.º centésimo milionésimo, centésimo de milionésimo, cem milhões avos
1,000,000,000 (109) everywhere but Brazil: mil milhões
Brazil: um bilhão
Brazil: bilionésimo
Portugal: milésimo milionésimo, milésimo de milionésimo
Brazil: bilionésimo, um bilhão avos
Portugal: milésimo milionésimo, milésimo de milionésimo
everywhere but Brazil: mil milhões avos
1 000 000 000
1012 everywhere but Brazil: um bilião
Brazil: um trilhão
Brazil: trilionésimo
Portugal: bilionésimo
Brazil: trilionésimo, um trilhão avos
Portugal: bilionésimo
everywhere but Brazil: um bilião avos
1 000 000 000 000
1015 everywhere but Brazil: mil biliões
Brazil: um quatrilhão, um quadrilhão
Brazil: quatrilionésimo, quadrilionésimo
Portugal: milésimo bilionésimo, milésimo de bilionésimo
Brazil: quatrilionésimo, quadrilionésimo, um quatrilhão avos, um quadrilhão avos
Portugal: milésimo bilionésimo, milésimo de bilionésimo
everywhere but Brazil: mil biliões avos
1000000000000000
1018 everywhere but Brazil: um trilião
Brazil: um quintilhão
Brazil: quintilionésimo
Portugal: trilionésimo
Brazil: quintilionésimo, um quintilhão avos
Portugal: trilionésimo
everywhere but Brazil: um trilião avos
1000000000000000000
1021 everywhere but Brazil: mil triliões
Brazil: um sextilhão
Brazil: sextilionésimo
Portugal: milésimo trilionésimo, milésimo de trilionésimo
Brazil: sextilionésimo, um sextilhão avos
Portugal: milésimo trilionésimo, milésimo de trilionésimo
everywhere but Brazil: mil triliões avos
1024 everywhere but Brazil: um quatrilião, um quadrilião
Brazil: um septilhão
Brazil: septilionésimo
Portugal: quatrilionésimo, quadrilionésimo
Brazil: septilionésimo, um septilhão avos
Portugal: quatrilionésimo, quadrilionésimo
everywhere but Brazil: um quatrilião avos, um quadrilião avos
1027 everywhere but Brazil: mil quatriliões, mil quadriliões
Brazil: um octilhão
Brazil: octilionésimo
Portugal: milésimo quatrilionésimo, milésimo quadrilionésimo, milésimo de quatrilionésimo, milésimo de quadrilionésimo
Brazil: octilionésimo, um octilhão avos
Portugal: milésimo quatrilionésimo, milésimo quadrilionésimo, milésimo de quatrilionésimo, milésimo de quadrilionésimo
everywhere but Brazil: mil quatriliões avos, mil quadriliões avos
1030 everywhere but Brazil: um quintilião
Brazil: um nonilhão
Brazil: nonilionésimo
Portugal: quintilionésimo
Brazil: nonilionésimo, um nonilhão avos
Portugal: quintilionésimo
everywhere but Brazil: um quintilião avos

local export = {numbers = {}}

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

export.additional_number_types = {
	{key = "group"},
}

local numbers = export.numbers

local function make_number(num, cardinal, ordinal, wplink, fractional)
	local numstr = m_numutils.format_fixed(num)
	local thousands_numstr = #numstr < 10 and m_numutils.add_thousands_separator(numstr, ".") or nil
	if not fractional or fractional == true then
		-- exceptions to the following rules need to be given explicitly
		if num == 0 or num == 1 then
			-- no fractional
		elseif type(num) == "number" and num <= 10 then
			fractional = ordinal
		else
			local avos_form = map(function(card)
				if not card:find("%[") then
					card = ("[[%s]]"):format(card)
				end
				return ("%s [[avo]]s"):format(card)
			end, cardinal)
			if fractional == true then
				-- both ordinal and cardinal + avos are possible
				local combined = {}
				local function insert_one_or_more(els)
					if type(els) == "table" then
						for _, el in ipairs(els) do
							table.insert(combined, el)
						end
					else
						table.insert(combined, els)
					end
				end
				insert_one_or_more(ordinal)
				insert_one_or_more(avos_form)
				fractional = combined
			else
				fractional = avos_form
			end
		end
	end
	numbers[num] = {
		cardinal = cardinal,
		ordinal = ordinal,
		ordinal_abbr = thousands_numstr and {thousands_numstr .. ".º"} or nil,
		fractional = fractional,
		wplink = wplink,
	}
end

make_number(0, "zero", "zerésimo", "0 (número)")
make_number(1, "um", "primeiro", "um")
numbers[1].multiplier = {"único", "singular"}
make_number(2, "dois", "segundo", "dois", {"meio", "metade"})
numbers[2].multiplier = {"dobro", "duplo"}
numbers[2].group = {"dupla", "par", "duo"}
make_number(3, "três", "terceiro", "três", "terço")
numbers[3].multiplier = {"triplo", "tríplice"}
numbers[3].group = {"trio", "trinca", "terceto", "tríade"}
make_number(4, "quatro", "quarto", "quatro")
numbers[4].multiplier = "quádruplo"
numbers[4].group = "quarteto"
make_number(5, "cinco", "quinto", "cinco")
numbers[5].multiplier = "quíntuplo"
numbers[5].group = "quinteto"
make_number(6, "seis", "sexto", "seis")
numbers[6].multiplier = "sêxtuplo"
numbers[6].group = "sexteto"
make_number(7, "sete", "sétimo", "sete")
numbers[7].multiplier = {"sétuplo", "séptuplo"}
numbers[7].group = "septeto"
make_number(8, "oito", "oitavo", "oito")
numbers[8].multiplier = "óctuplo"
numbers[8].group = "octeto"
make_number(9, "nove", {"nono", "noveno"}, "nove")
numbers[9].multiplier = {"nônuplo<tag:Brazil>", "nónuplo<tag:Portugal>"}
numbers[9].group = "noneto"
make_number(10, "dez", "décimo", "dez")
numbers[10].multiplier = "décuplo"
make_number(11, "onze", {"décimo primeiro", "undécimo"}, nil, {"undécimo", "[[onze]] [[avo]]s"})
numbers[11].multiplier = "undécuplo"
make_number(12, "doze", {"décimo segundo", "duodécimo"}, nil, {"duodécimo", "[[doze]] [[avo]]s"})
numbers[12].multiplier = "duodécuplo"
make_number(13, "treze", "décimo terceiro", "treze")
make_number(14, {"catorze", "quatorze"}, "décimo quarto", "catorze")
make_number(15, "quinze", "décimo quinto")
make_number(16, {"dezesseis<tag:Brazil>", "dezasseis<tag:Portugal>"}, "décimo sexto")
make_number(17, {"dezessete<tag:Brazil>", "dezassete<tag:Portugal>"}, "décimo sétimo", "17 (número)")
make_number(18, "dezoito", "décimo oitavo", "dezoito")
make_number(19, {"dezenove<tag:Brazil>", "dezanove<tag:Portugal>"}, "décimo nono")

for i, vals in ipairs {
	{ "vinte", "vigésimo" },
	{ "trinta", "trigésimo" },
	{ "quarenta", "quadragésimo" },
	{ "cinquenta", "quinquagésimo" },
	{ "sessenta", "sexagésimo" },
	{ "setenta", {"septuagésimo", "setuagésimo"}, },
	{ "oitenta", "octogésimo" },
	{ "noventa", "nonagésimo" },
} do
	local tens = (i + 1) * 10
	local tens_cardinal, tens_ordinal = unpack(vals)
	local function has_wplink(num)
		-- random collection of numbers with Portuguese Wikipedia entries; update as appropriate
		return num == 23 or num == 25 or num == 30 or num == 35 or num == 36 or num == 37
	end

	-- true here means both ordinal and cardinal + avos are possible fractional forms
	make_number(tens, tens_cardinal, tens_ordinal, has_wplink(tens) and tens_cardinal or nil, true)

	for ones = 1, 9 do
		local num = tens + ones
		local ones_numeral = numbers[ones]
		local ones_ordinal = ones_numeral.ordinal
		if ones == 9 then
			ones_ordinal = "nono"
		end
		local cardinal = tens_cardinal .. " e " .. ones_numeral.cardinal
		-- Use map() because of 70th.
		local ordinal = map(function(tens_ord) return tens_ord .. " " .. ones_ordinal end, tens_ordinal)
		local wplink = has_wplink(num) and tens_cardinal or nil
		make_number(num, cardinal, ordinal, wplink)
	end
end

-- Ordinals from https://www.normaculta.com.br/numerais-ordinais/
-- Fractionals from https://www.normaculta.com.br/numerais-fracionarios/
-- Note that the above site says 1/100 = only "um centésimo", but in fact "um cem avos" is also common and endorsed by
-- other sites such as http://www.uel.br/projetos/matessencial/basico/fundamental/fracoes.html
make_number(100, {"cem<q:alone or followed by a noun or higher numeral>", "cento<q:followed by a lower numeral>"}, "centésimo", nil, {"centésimo", "[[cem]] [[avo]]s"})
numbers[100].multiplier = "cêntuplo"
make_number(200, "duzentos", "ducentésimo", nil, true)
make_number(300, "trezentos", {"trecentésimo", "tricentésimo"}, nil, true)
make_number(400, "quatrocentos", "quadringentésimo", nil, true)
make_number(500, "quinhentos", "quingentésimo", "quinhentos", true)
make_number(600, "seiscentos", {"sexcentésimo", "seiscentésimo"}, "seiscentos", true)
make_number(700, "setecentos", {"septingentésimo", "setingentésimo"}, "setecentos", true)
make_number(800, "oitocentos", "octingentésimo", nil, true)
make_number(900, "novecentos", {"noningentésimo", "nongentésimo"}, "novecentos", true)
make_number(1000, "mil", "milésimo", nil, true)
make_number(10000, "[[dez]] [[mil]]", {"[[décimo]] [[milésimo]]", "[[décimo]] [[de]] [[milésimo]]"}, "dez mil", true)
make_number(100000, "[[cem]] [[mil]]", {"[[centésimo]] [[milésimo]]", "[[centésimo]] [[de]] [[milésimo]]"}, nil, true)
make_number(1000000, "[[um]] [[milhão]]<link:milhão>", "milionésimo", "milhão", true)
make_number(10000000, "[[dez]] [[milhão|milhões]]", {"[[décimo]] [[milionésimo]]", "[[décimo]] [[de]] [[milionésimo]]"}, nil, true)
make_number(100000000, "[[cem]] [[milhão|milhões]]", {"[[centésimo]] [[milionésimo]]", "[[centésimo]] [[de]] [[milionésimo]]"}, nil, true)
make_number(power_of(9), {"[[mil]] [[milhão|milhões]]<tag:everywhere but Brazil>", "[[um]] [[bilhão]]<link:bilhão><tag:Brazil>"}, {"bilionésimo<tag:Brazil>", "[[milésimo]] [[milionésimo]]<tag:Portugal>", "[[milésimo]] [[de]] [[milionésimo]]<tag:Portugal>"},
	"1 000 000 000", true)
make_number(power_of(12), {"[[um]] [[bilião]]<link:bilião><tag:everywhere but Brazil>", "[[um]] [[trilhão]]<link:trilhão><tag:Brazil>"}, {"trilionésimo<tag:Brazil>", "bilionésimo<tag:Portugal>"},
	"1 000 000 000 000", true)
make_number(power_of(15), {"[[mil]] [[bilião|biliões]]<tag:everywhere but Brazil>", "[[um]] [[quatrilhão]]<link:quatrilhão><tag:Brazil>", "[[um]] [[quadrilhão]]<link:quadrilhão><tag:Brazil>"}, {"quatrilionésimo<tag:Brazil>", "quadrilionésimo<tag:Brazil>", "[[milésimo]] [[bilionésimo]]<tag:Portugal>", "[[milésimo]] [[de]] [[bilionésimo]]<tag:Portugal>"},
	"1000000000000000", true)
make_number(power_of(18), {"[[um]] [[trilião]]<link:trilião><tag:everywhere but Brazil>", "[[um]] [[quintilhão]]<link:quintilhão><tag:Brazil>"}, {"quintilionésimo<tag:Brazil>", "trilionésimo<tag:Portugal>"},
	"1000000000000000000", true)
make_number(power_of(21), {"[[mil]] [[trilião|triliões]]<tag:everywhere but Brazil>", "[[um]] [[sextilhão]]<link:sextilhão><tag:Brazil>"}, {"sextilionésimo<tag:Brazil>", "[[milésimo]] [[trilionésimo]]<tag:Portugal>", "[[milésimo]] [[de]] [[trilionésimo]]<tag:Portugal>"},
	nil, true)
make_number(power_of(24), {"[[um]] [[quatrilião]]<link:quatrilião><tag:everywhere but Brazil>", "[[um]] [[quadrilião]]<link:quadrilião><tag:everywhere but Brazil>", "[[um]] [[septilhão]]<link:septilhão><tag:Brazil>"}, {"septilionésimo<tag:Brazil>", "quatrilionésimo<tag:Portugal>", "quadrilionésimo<tag:Portugal>"},
	nil, true)
make_number(power_of(27), {"[[mil]] [[quatrilião|quatriliões]]<tag:everywhere but Brazil>", "[[mil]] [[quadrilião|quadriliões]]<tag:everywhere but Brazil>", "[[um]] [[octilhão]]<link:octilhão><tag:Brazil>"}, {"octilionésimo<tag:Brazil>", "[[milésimo]] [[quatrilionésimo]]<tag:Portugal>", "[[milésimo]] [[quadrilionésimo]]<tag:Portugal>", "[[milésimo]] [[de]] [[quatrilionésimo]]<tag:Portugal>", "[[milésimo]] [[de]] [[quadrilionésimo]]<tag:Portugal>"},
	nil, true)
make_number(power_of(30), {"[[um]] [[quintilião]]<link:quintilião><tag:everywhere but Brazil>", "[[um]] [[nonilhão]]<link:nonilhão><tag:Brazil>"}, {"nonilionésimo<tag:Brazil>", "quintilionésimo<tag:Portugal>"},
	nil, true)

return export