This module contains data on various types of numbers in ฝรั่งเศส.

จำนวน เชิงการนับ เชิงอันดับที่ ตัวย่อเชิงอันดับที่ ตัวคูณ เศษส่วน (⅟…) Wikipedia link
0 zéro zéroième 0e, (now nonstandard) 0ème 0 (nombre)
1 un premier 1er simple entier 1 (nombre)
2 deux deuxième, second 2e, 2d, (nonstandard) 2ème double demi, moitié 2 (nombre)
3 trois troisième 3e, (nonstandard) 3ème triple tiers 3 (nombre)
4 quatre quatrième 4e, (nonstandard) 4ème quadruple quart 4 (nombre)
5 cinq cinquième 5e, (now nonstandard) 5ème quintuple 5 (nombre)
6 six sixième 6e, (now nonstandard) 6ème sextuple 6 (nombre)
7 sept septième 7e, (now nonstandard) 7ème septuple 7 (nombre)
8 huit huitième 8e, (now nonstandard) 8ème octuple 8 (nombre)
9 neuf neuvième 9e, (now nonstandard) 9ème nonuple 9 (nombre)
10 dix dixième 10e, (now nonstandard) 10ème décuple 10 (nombre)
11 onze onzième 11e, (now nonstandard) 11ème 11 (nombre)
12 douze douzième 12e, (now nonstandard) 12ème 12 (nombre)
13 treize treizième 13e, (now nonstandard) 13ème 13 (nombre)
14 quatorze quatorzième 14e, (now nonstandard) 14ème 14 (nombre)
15 quinze quinzième 15e, (now nonstandard) 15ème 15 (nombre)
16 seize seizième 16e, (now nonstandard) 16ème 16 (nombre)
17 dix-sept dix-septième 17e, (now nonstandard) 17ème 17 (nombre)
18 dix-huit dix-huitième 18e, (now nonstandard) 18ème 18 (nombre)
19 dix-neuf dix-neuvième 19e, (now nonstandard) 19ème 19 (nombre)
20 vingt vingtième 20e, (now nonstandard) 20ème 20 (nombre)
21 traditional spelling: vingt et un
post-1990 spelling: vingt-et-un
traditional spelling: vingt et unième
post-1990 spelling: vingt-et-unième
21e, (now nonstandard) 21ème 21 (nombre)
22 vingt-deux vingt-deuxième 22e, (now nonstandard) 22ème 22 (nombre)
23 vingt-trois vingt-troisième 23e, (now nonstandard) 23ème 23 (nombre)
24 vingt-quatre vingt-quatrième 24e, (now nonstandard) 24ème 24 (nombre)
25 vingt-cinq vingt-cinquième 25e, (now nonstandard) 25ème 25 (nombre)
26 vingt-six vingt-sixième 26e, (now nonstandard) 26ème 26 (nombre)
27 vingt-sept vingt-septième 27e, (now nonstandard) 27ème 27 (nombre)
28 vingt-huit vingt-huitième 28e, (now nonstandard) 28ème 28 (nombre)
29 vingt-neuf vingt-neuvième 29e, (now nonstandard) 29ème 29 (nombre)
30 trente trentième 30e, (now nonstandard) 30ème 30 (nombre)
31 traditional spelling: trente et un
post-1990 spelling: trente-et-un
traditional spelling: trente et unième
post-1990 spelling: trente-et-unième
31e, (now nonstandard) 31ème 31 (nombre)
32 trente-deux trente-deuxième 32e, (now nonstandard) 32ème 32 (nombre)
33 trente-trois trente-troisième 33e, (now nonstandard) 33ème 33 (nombre)
34 trente-quatre trente-quatrième 34e, (now nonstandard) 34ème 34 (nombre)
35 trente-cinq trente-cinquième 35e, (now nonstandard) 35ème 35 (nombre)
36 trente-six trente-sixième 36e, (now nonstandard) 36ème 36 (nombre)
37 trente-sept trente-septième 37e, (now nonstandard) 37ème 37 (nombre)
38 trente-huit trente-huitième 38e, (now nonstandard) 38ème 38 (nombre)
39 trente-neuf trente-neuvième 39e, (now nonstandard) 39ème 39 (nombre)
40 quarante quarantième 40e, (now nonstandard) 40ème 40 (nombre)
41 traditional spelling: quarante et un
post-1990 spelling: quarante-et-un
traditional spelling: quarante et unième
post-1990 spelling: quarante-et-unième
41e, (now nonstandard) 41ème 41 (nombre)
42 quarante-deux quarante-deuxième 42e, (now nonstandard) 42ème 42 (nombre)
43 quarante-trois quarante-troisième 43e, (now nonstandard) 43ème 43 (nombre)
44 quarante-quatre quarante-quatrième 44e, (now nonstandard) 44ème 44 (nombre)
45 quarante-cinq quarante-cinquième 45e, (now nonstandard) 45ème 45 (nombre)
46 quarante-six quarante-sixième 46e, (now nonstandard) 46ème 46 (nombre)
47 quarante-sept quarante-septième 47e, (now nonstandard) 47ème 47 (nombre)
48 quarante-huit quarante-huitième 48e, (now nonstandard) 48ème 48 (nombre)
49 quarante-neuf quarante-neuvième 49e, (now nonstandard) 49ème 49 (nombre)
50 cinquante cinquantième 50e, (now nonstandard) 50ème 50 (nombre)
51 traditional spelling: cinquante et un
post-1990 spelling: cinquante-et-un
traditional spelling: cinquante et unième
post-1990 spelling: cinquante-et-unième
51e, (now nonstandard) 51ème 51 (nombre)
52 cinquante-deux cinquante-deuxième 52e, (now nonstandard) 52ème 52 (nombre)
53 cinquante-trois cinquante-troisième 53e, (now nonstandard) 53ème 53 (nombre)
54 cinquante-quatre cinquante-quatrième 54e, (now nonstandard) 54ème 54 (nombre)
55 cinquante-cinq cinquante-cinquième 55e, (now nonstandard) 55ème 55 (nombre)
56 cinquante-six cinquante-sixième 56e, (now nonstandard) 56ème 56 (nombre)
57 cinquante-sept cinquante-septième 57e, (now nonstandard) 57ème 57 (nombre)
58 cinquante-huit cinquante-huitième 58e, (now nonstandard) 58ème 58 (nombre)
59 cinquante-neuf cinquante-neuvième 59e, (now nonstandard) 59ème 59 (nombre)
60 soixante soixantième 60e, (now nonstandard) 60ème 60 (nombre)
61 traditional spelling: soixante et un
post-1990 spelling: soixante-et-un
traditional spelling: soixante et unième
post-1990 spelling: soixante-et-unième
61e, (now nonstandard) 61ème 61 (nombre)
62 soixante-deux soixante-deuxième 62e, (now nonstandard) 62ème 62 (nombre)
63 soixante-trois soixante-troisième 63e, (now nonstandard) 63ème 63 (nombre)
64 soixante-quatre soixante-quatrième 64e, (now nonstandard) 64ème 64 (nombre)
65 soixante-cinq soixante-cinquième 65e, (now nonstandard) 65ème 65 (nombre)
66 soixante-six soixante-sixième 66e, (now nonstandard) 66ème 66 (nombre)
67 soixante-sept soixante-septième 67e, (now nonstandard) 67ème 67 (nombre)
68 soixante-huit soixante-huitième 68e, (now nonstandard) 68ème 68 (nombre)
69 soixante-neuf soixante-neuvième 69e, (now nonstandard) 69ème 69 (nombre)
70 vigesimal: soixante-dix
decimal: septante
vigesimal: soixante-dixième
decimal: septantième
70e, (now nonstandard) 70ème 70 (nombre)
71 vigesimal / traditional spelling: soixante et onze
vigesimal / post-1990 spelling: soixante-et-onze
decimal / traditional spelling: septante et un
decimal / post-1990 spelling: septante-et-un
vigesimal / traditional spelling: soixante et onzième
vigesimal / post-1990 spelling: soixante-et-onzième
decimal / traditional spelling: septante et unième
decimal / post-1990 spelling: septante-et-unième
71e, (now nonstandard) 71ème 71 (nombre)
72 vigesimal: soixante-douze
decimal: septante-deux
vigesimal: soixante-douzième
decimal: septante-deuxième
72e, (now nonstandard) 72ème 72 (nombre)
73 vigesimal: soixante-treize
decimal: septante-trois
vigesimal: soixante-treizième
decimal: septante-troisième
73e, (now nonstandard) 73ème 73 (nombre)
74 vigesimal: soixante-quatorze
decimal: septante-quatre
vigesimal: soixante-quatorzième
decimal: septante-quatrième
74e, (now nonstandard) 74ème 74 (nombre)
75 vigesimal: soixante-quinze
decimal: septante-cinq
vigesimal: soixante-quinzième
decimal: septante-cinquième
75e, (now nonstandard) 75ème 75 (nombre)
76 vigesimal: soixante-seize
decimal: septante-six
vigesimal: soixante-seizième
decimal: septante-sixième
76e, (now nonstandard) 76ème 76 (nombre)
77 vigesimal: soixante-dix-sept
decimal: septante-sept
vigesimal: soixante-dix-septième
decimal: septante-septième
77e, (now nonstandard) 77ème 77 (nombre)
78 vigesimal: soixante-dix-huit
decimal: septante-huit
vigesimal: soixante-dix-huitième
decimal: septante-huitième
78e, (now nonstandard) 78ème 78 (nombre)
79 vigesimal: soixante-dix-neuf
decimal: septante-neuf
vigesimal: soixante-dix-neuvième
decimal: septante-neuvième
79e, (now nonstandard) 79ème 79 (nombre)
80 vigesimal: quatre-vingts
decimal: huitante, octante
vigesimal: quatre-vingtième
decimal: huitantième, octantième
80e, (now nonstandard) 80ème 80 (nombre)
81 vigesimal: quatre-vingt-un
decimal / traditional spelling: huitante et un, octante et un
decimal / post-1990 spelling: huitante-et-un, octante-et-un
vigesimal: quatre-vingt-unième
decimal / traditional spelling: huitante et unième, octante et unième
decimal / post-1990 spelling: huitante-et-unième, octante-et-unième
81e, (now nonstandard) 81ème 81 (nombre)
82 vigesimal: quatre-vingt-deux
decimal: huitante-deux, octante-deux
vigesimal: quatre-vingt-deuxième
decimal: huitante-deuxième, octante-deuxième
82e, (now nonstandard) 82ème 82 (nombre)
83 vigesimal: quatre-vingt-trois
decimal: huitante-trois, octante-trois
vigesimal: quatre-vingt-troisième
decimal: huitante-troisième, octante-troisième
83e, (now nonstandard) 83ème 83 (nombre)
84 vigesimal: quatre-vingt-quatre
decimal: huitante-quatre, octante-quatre
vigesimal: quatre-vingt-quatrième
decimal: huitante-quatrième, octante-quatrième
84e, (now nonstandard) 84ème 84 (nombre)
85 vigesimal: quatre-vingt-cinq
decimal: huitante-cinq, octante-cinq
vigesimal: quatre-vingt-cinquième
decimal: huitante-cinquième, octante-cinquième
85e, (now nonstandard) 85ème 85 (nombre)
86 vigesimal: quatre-vingt-six
decimal: huitante-six, octante-six
vigesimal: quatre-vingt-sixième
decimal: huitante-sixième, octante-sixième
86e, (now nonstandard) 86ème 86 (nombre)
87 vigesimal: quatre-vingt-sept
decimal: huitante-sept, octante-sept
vigesimal: quatre-vingt-septième
decimal: huitante-septième, octante-septième
87e, (now nonstandard) 87ème 87 (nombre)
88 vigesimal: quatre-vingt-huit
decimal: huitante-huit, octante-huit
vigesimal: quatre-vingt-huitième
decimal: huitante-huitième, octante-huitième
88e, (now nonstandard) 88ème 88 (nombre)
89 vigesimal: quatre-vingt-neuf
decimal: huitante-neuf, octante-neuf
vigesimal: quatre-vingt-neuvième
decimal: huitante-neuvième, octante-neuvième
89e, (now nonstandard) 89ème 89 (nombre)
90 vigesimal: quatre-vingt-dix
decimal: nonante
vigesimal: quatre-vingt-dixième
decimal: nonantième
90e, (now nonstandard) 90ème 90 (nombre)
91 vigesimal: quatre-vingt-onze
decimal / traditional spelling: nonante et un
decimal / post-1990 spelling: nonante-et-un
vigesimal: quatre-vingt-onzième
decimal / traditional spelling: nonante et unième
decimal / post-1990 spelling: nonante-et-unième
91e, (now nonstandard) 91ème 91 (nombre)
92 vigesimal: quatre-vingt-douze
decimal: nonante-deux
vigesimal: quatre-vingt-douzième
decimal: nonante-deuxième
92e, (now nonstandard) 92ème 92 (nombre)
93 vigesimal: quatre-vingt-treize
decimal: nonante-trois
vigesimal: quatre-vingt-treizième
decimal: nonante-troisième
93e, (now nonstandard) 93ème 93 (nombre)
94 vigesimal: quatre-vingt-quatorze
decimal: nonante-quatre
vigesimal: quatre-vingt-quatorzième
decimal: nonante-quatrième
94e, (now nonstandard) 94ème 94 (nombre)
95 vigesimal: quatre-vingt-quinze
decimal: nonante-cinq
vigesimal: quatre-vingt-quinzième
decimal: nonante-cinquième
95e, (now nonstandard) 95ème 95 (nombre)
96 vigesimal: quatre-vingt-seize
decimal: nonante-six
vigesimal: quatre-vingt-seizième
decimal: nonante-sixième
96e, (now nonstandard) 96ème 96 (nombre)
97 vigesimal: quatre-vingt-dix-sept
decimal: nonante-sept
vigesimal: quatre-vingt-dix-septième
decimal: nonante-septième
97e, (now nonstandard) 97ème 97 (nombre)
98 vigesimal: quatre-vingt-dix-huit
decimal: nonante-huit
vigesimal: quatre-vingt-dix-huitième
decimal: nonante-huitième
98e, (now nonstandard) 98ème 98 (nombre)
99 vigesimal: quatre-vingt-dix-neuf
decimal: nonante-neuf
vigesimal: quatre-vingt-dix-neuvième
decimal: nonante-neuvième
99e, (now nonstandard) 99ème 99 (nombre)
100 cent centième 100e, (now nonstandard) 100ème centuple 100 (nombre)
200 traditional spelling: deux cents
post-1990 spelling: deux-cents
traditional spelling: deux centième
post-1990 spelling: deux-centième
200e, (now nonstandard) 200ème 200 (nombre)
300 traditional spelling: trois cents
post-1990 spelling: trois-cents
traditional spelling: trois centième
post-1990 spelling: trois-centième
300e, (now nonstandard) 300ème 300 (nombre)
400 traditional spelling: quatre cents
post-1990 spelling: quatre-cents
traditional spelling: quatre centième
post-1990 spelling: quatre-centième
400e, (now nonstandard) 400ème 400 (nombre)
500 traditional spelling: cinq cents
post-1990 spelling: cinq-cents
traditional spelling: cinq centième
post-1990 spelling: cinq-centième
500e, (now nonstandard) 500ème 500 (nombre)
600 traditional spelling: six cents
post-1990 spelling: six-cents
traditional spelling: six centième
post-1990 spelling: six-centième
600e, (now nonstandard) 600ème 600 (nombre)
700 traditional spelling: sept cents
post-1990 spelling: sept-cents
traditional spelling: sept centième
post-1990 spelling: sept-centième
700e, (now nonstandard) 700ème 700 (nombre)
800 traditional spelling: huit cents
post-1990 spelling: huit-cents
traditional spelling: huit centième
post-1990 spelling: huit-centième
800e, (now nonstandard) 800ème 800 (nombre)
900 traditional spelling: neuf cents
post-1990 spelling: neuf-cents
traditional spelling: neuf centième
post-1990 spelling: neuf-centième
900e, (now nonstandard) 900ème 900 (nombre)
1,000 mille millième 1000e, (now nonstandard) 1000ème 1000 (nombre)
2,000 traditional spelling: deux mille
post-1990 spelling: deux-mille
traditional spelling: deux millième
post-1990 spelling: deux-millième
2000e, (now nonstandard) 2000ème 2000 (nombre)
3,000 traditional spelling: trois mille
post-1990 spelling: trois-mille
traditional spelling: trois millième
post-1990 spelling: trois-millième
3000e, (now nonstandard) 3000ème 3000 (nombre)
4,000 traditional spelling: quatre mille
post-1990 spelling: quatre-mille
traditional spelling: quatre millième
post-1990 spelling: quatre-millième
4000e, (now nonstandard) 4000ème 4000 (nombre)
5,000 traditional spelling: cinq mille
post-1990 spelling: cinq-mille
traditional spelling: cinq millième
post-1990 spelling: cinq-millième
5000e, (now nonstandard) 5000ème 5000 (nombre)
6,000 traditional spelling: six mille
post-1990 spelling: six-mille
traditional spelling: six millième
post-1990 spelling: six-millième
6000e, (now nonstandard) 6000ème 6000 (nombre)
7,000 traditional spelling: sept mille
post-1990 spelling: sept-mille
traditional spelling: sept millième
post-1990 spelling: sept-millième
7000e, (now nonstandard) 7000ème 7000 (nombre)
8,000 traditional spelling: huit mille
post-1990 spelling: huit-mille
traditional spelling: huit millième
post-1990 spelling: huit-millième
8000e, (now nonstandard) 8000ème 8000 (nombre)
9,000 traditional spelling: neuf mille
post-1990 spelling: neuf-mille
traditional spelling: neuf millième
post-1990 spelling: neuf-millième
9000e, (now nonstandard) 9000ème 9000 (nombre)
10,000 traditional spelling: dix mille
post-1990 spelling: dix-mille
traditional spelling: dix millième
post-1990 spelling: dix-millième
10 000e, (now nonstandard) 10 000ème 10000 (nombre)
100,000 traditional spelling: cent mille
post-1990 spelling: cent-mille
traditional spelling: cent millième
post-1990 spelling: cent-millième
100 000e, (now nonstandard) 100 000ème 100000 (nombre)
1,000,000 (106) un million millionième 1 000 000e, (now nonstandard) 1 000 000ème million
2,000,000 (2 × 106) deux millions traditional spelling: deux millionième
post-1990 spelling: deux-millionième
2 000 000e, (now nonstandard) 2 000 000ème
1,000,000,000 (109) un milliard milliardième milliard
1012 un billion, mille milliards billionième, millième de milliardième billion
1015 un billiard, un million de milliards billiardième, millionième de milliardième billiard
1018 un trillion, un milliard de milliards trillionième, milliardième de milliardième trillion
1021 un trilliard, mille milliards de milliards trilliardième, millième de milliardième de milliardième trilliard
1024 un quadrillion quadrillionième quadrillion
1027 un quadrilliard quadrilliardième quadrilliard
1030 un quintillion quintillionième quintillion
1033 un quintilliard quintilliardième quintilliard
1036 un sextillion sextillionième sextillion
1039 un sextilliard sextilliardième sextilliard
1042 un septillion septillionième septillion
1045 un septilliard septilliardième septilliard
1048 un octillion octillionième octillion
1051 un octilliard octilliardième octilliard
1054 un nonillion nonillionième nonillion
1057 un nonilliard nonilliardième nonilliard
1060 un décillion décillionième décillion
1063 un décilliard décilliardième décilliard
1066 un undécillion undécillionième undécillion
1072 un duodécillion duodécillionième duodécillion
1078 un trédécillion trédécillionième trédécillion

local export = {numbers = {}}

local m_numutils = require("Module:number list/utils")
local map = m_numutils.map
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

local function add_ordinal_suffix(term)
	if rfind(term, "f$") then
		return rsub(term, "f$", "vième") -- neuf -> neuvième
	elseif rfind(term, "q$") then
		return term .. "uième" -- cinq -> cinquième
	elseif rfind(term, "ts$") then
		return rsub(term, "s$", "ième") -- quatre-vingts -> quatre-vingtième
	else
		return rsub(term, "e$", "") .. "ième" -- quatre -> quatrième, trois -> troisième
	end
end

local function make_number(num, cardinal, ordinal, multiplier, wplink)
	local numstr = m_numutils.format_fixed(num)
	local with_thousands = #numstr < 10 and m_numutils.add_thousands_separator(numstr, " ") or nil
	numbers[num] = {
		cardinal = cardinal,
		ordinal = ordinal or map(function (card) return add_ordinal_suffix(card) end, cardinal),
		-- FIXME, should use superscript e
		ordinal_abbr = with_thousands and {with_thousands .. "e", with_thousands .. "ème<q:now nonstandard>"} or nil,
		multiplier = multiplier,
		wplink = wplink or type(num) == "number" and num < 1000000 and num .. " (nombre)" or nil,
	}
end

make_number(0, "zéro")

numbers[1] = {
	cardinal = "un",
	ordinal = "premier",
	ordinal_abbr = "1er",
	fractional = "entier",
	multiplier = "simple",
	wplink = "1 (nombre)",
}

numbers[2] = {
	cardinal = "deux",
	ordinal = {"deuxième", "second"},
	ordinal_abbr = {"2e", "2d", "2ème<q:nonstandard>"},
	fractional = {"demi", "moitié"},
	multiplier = "double",
	wplink = "2 (nombre)",
}

numbers[3] = {
	cardinal = "trois",
	ordinal = "troisième",
	ordinal_abbr = {"3e", "3ème<q:nonstandard>"},
	fractional = "tiers",
	multiplier = "triple",
	wplink = "3 (nombre)",
}

numbers[4] = {
	cardinal = "quatre",
	ordinal = "quatrième",
	ordinal_abbr = {"4e", "4ème<q:nonstandard>"},
	fractional = "quart",
	multiplier = "quadruple",
	wplink = "4 (nombre)",
}

make_number(5, "cinq", nil, "quintuple")
make_number(6, "six", nil, "sextuple")
make_number(7, "sept", nil, "septuple")
make_number(8, "huit", nil, "octuple")
make_number(9, "neuf", nil, "nonuple")
make_number(10, "dix", nil, "décuple")

-- Generate numbers from 11 through 19.
for i, teen in ipairs { "onze", "douze", "treize", "quatorze", "quinze", "seize",
	"dix-sept", "dix-huit", "dix-neuf" } do
	make_number(i + 10, teen)
end

-- Generate even multiples of 10 from 20 through 90.
for i, ten_multiple in ipairs { "vingt", "trente", "quarante", "cinquante", "soixante",
	{"soixante-dix<tag:vigesimal>", "septante<tag:decimal>"},
	{"quatre-vingts<tag:vigesimal>", "huitante<tag:decimal>", "octante<tag:decimal>"},
	{"quatre-vingt-dix<tag:vigesimal>", "nonante<tag:decimal>"},
} do
	make_number((i + 1) * 10, ten_multiple)
end

-- Generate numbers from 21 through 99, other than even multiples of ten.
for tens = 20, 90, 10 do
	for ones = 1, 9 do
		local num = tens + ones
		-- Generate the cardinal given the cardinal form for the tens (e.g. "trente", "septante", "quatre-vingt-dix",
		-- etc.). There are several special cases:
		-- (1) soixante and quatre-vingts are vigesimal, hence 72 = soixante-douze, 92 = quatre-vingt-douze.
		-- (2) -et- is inserted before "un" and "onze", but not after quatre-vingts.
		-- (3) quatre-vingts changes to quatre-vingt- before a ones numeral.
		local function generate_cardinal(tens_cardinal)
			local ones_cardinal
			tens_cardinal = rsub(tens_cardinal, "%-dix$", "") -- chop off -dix from vigesimal 70 and 90
			tens_cardinal = rsub(tens_cardinal, "ts$", "t") -- quatre-vingts -> quatre-vingt
			if tens_cardinal == "soixante" or tens_cardinal == "quatre-vingt" then
				-- vigesimal
				ones_cardinal = numbers[num % 20].cardinal
			else
				ones_cardinal = numbers[ones].cardinal
			end
			if ones == 1 and tens_cardinal ~= "quatre-vingt" or ones == 11 and tens_cardinal == "soixante" then
				return {("%s et %s<tag:traditional spelling>"):format(tens_cardinal, ones_cardinal),
					("%s-et-%s<tag:post-1990 spelling>"):format(tens_cardinal, ones_cardinal)}
			else
				return tens_cardinal .. "-" .. ones_cardinal
			end
		end

		local cardinal = map(generate_cardinal, numbers[tens].cardinal)
		make_number(num, cardinal)
	end
end

make_number(100, "cent", nil, "centuple")

-- Generate 200 through 900 by 100.
for i = 200, 900, 100 do
	local base = i / 100
	local base_cardinal = numbers[base].cardinal
	make_number(i,
		{base_cardinal .. " cents<tag:traditional spelling>", base_cardinal .. "-cents<tag:post-1990 spelling>"},
		{base_cardinal .. " centième<tag:traditional spelling>", base_cardinal .. "-centième<tag:post-1990 spelling>"}
	)
end

make_number(1000, "mille")

-- Generate 2000 through 10000 by 1000.
for i = 2000, 10000, 1000 do
	local base = i / 1000
	local base_cardinal = numbers[base].cardinal
	make_number(i,
		{base_cardinal .. " mille<tag:traditional spelling>", base_cardinal .. "-mille<tag:post-1990 spelling>"},
		{base_cardinal .. " millième<tag:traditional spelling>", base_cardinal .. "-millième<tag:post-1990 spelling>"}
	)
end

make_number(100000, {"cent mille<tag:traditional spelling>", "cent-mille<tag:post-1990 spelling>"},
	{"cent millième<tag:traditional spelling>", "cent-millième<tag:post-1990 spelling>"})
make_number(1000000, "[[un]] [[million]]<link:million>", "millionième", nil, "million")
make_number(2000000, "[[deux]] [[million]]s", {"deux millionième<tag:traditional spelling>", "deux-millionième<tag:post-1990 spelling>"})
make_number(power_of(9), "[[un]] [[milliard]]<link:milliard>", "milliardième", nil, "milliard")
make_number(power_of(12), {"[[un]] [[billion]]<link:billion>", "[[mille]] [[milliard]]s"},
	{"billionième", "[[millième]] [[de]] [[milliardième]]"}, nil, "billion")
make_number(power_of(15), {"[[un]] [[billiard]]<link:billiard>", "[[un]] [[million]] [[de]] [[milliard]]s"},
	{"billiardième", "[[millionième]] [[de]] [[milliardième]]"}, nil, "billiard")
make_number(power_of(18), {"[[un]] [[trillion]]<link:trillion>", "[[un]] [[milliard]] [[de]] [[milliard]]s"},
	{"trillionième", "[[milliardième]] [[de]] [[milliardième]]"}, nil, "trillion")
make_number(power_of(21), {"[[un]] [[trilliard]]<link:trilliard>", "[[mille]] [[milliard]]s [[de]] [[milliard]]s"},
	{"trilliardième", "[[millième]] [[de]] [[milliardième]] [[de]] [[milliardième]]"},  nil, "trilliard")

local function make_high_number(power, base)
	make_number(power_of(power), ("[[un]] [[%s]]<link:%s>"):format(base, base), base .. "ième", nil, base)
end

make_high_number(24, "quadrillion")
make_high_number(27, "quadrilliard")
make_high_number(30, "quintillion")
make_high_number(33, "quintilliard")
make_high_number(36, "sextillion")
make_high_number(39, "sextilliard")
make_high_number(42, "septillion")
make_high_number(45, "septilliard")
make_high_number(48, "octillion")
make_high_number(51, "octilliard")
make_high_number(54, "nonillion")
make_high_number(57, "nonilliard")
make_high_number(60, "décillion")
make_high_number(63, "décilliard")
make_high_number(66, "undécillion")
make_high_number(72, "duodécillion")
make_high_number(78, "trédécillion")

return export