Saltar para o conteúdo

Módulo:Extenso/Ordinal

Origem: Wikipédia, a enciclopédia livre.
Documentação do módulo[ver] [editar] [histórico] [purgar]

Descrição[editar código-fonte]

Este módulo possibilita processar um valor de entrada (um número inteiro) de modo a devolver o valor por extenso. Pode tanto ser invocado diretamente quanto ser usado por outros módulos.

Uso[editar código-fonte]

  • {{#invoke:Extenso/Ordinal|extenso|<valor>|<flexão de genero>}}

Exemplos[editar código-fonte]

  • {{#invoke:Extenso/Ordinal|extenso|202|m}} → ducentésimo segundo
  • {{#invoke:Extenso/Ordinal|extenso|202}} → ducentésimo segundo
  • {{#invoke:Extenso/Ordinal|extenso|202|f}} → ducentésima segunda
  • {{#invoke:Extenso/Ordinal|extenso|999999999999999|f}} → novecentas e noventa e nove trilionésima novecentas e noventa e nove bilhonésima novecentas e noventa e nove milhonésima novecentas e noventa e nove milésima noningentésima nonagésima nona

Cabeçalho de TemplateData

As informações a seguir (editar) são definidas com TemplateData. Isso possibilita o seu uso pelo Editor Visual e por outras ferramentas.

Transforma o número inteiro em número ordinal e o escreve por extenso

Parâmetros da predefinição[Editar dados da predefinição]

Esta predefinição prefere a formatação em linha dos parâmetros.

ParâmetroDescriçãoTipoEstado
valorvalor 1

Número inteiro

Exemplo
4
Númeroobrigatório
flexaoflexao 2

flexão de gênero do número ordinal

Padrão
"f" ou "m", para flexão no feminino e no masculino, respectivamente
Exemplo
m
Valor automático
m
Stringrecomendado

Testes unitários[editar código-fonte]

Todos os testes passaram.

test_module
Texto Esperado Atual
Sim {{#invoke:Extenso/Ordinal|extenso|1|m}} primeiro primeiro
Sim {{#invoke:Extenso/Ordinal|extenso|1|f}} primeira primeira
Sim {{#invoke:Extenso/Ordinal|extenso|1232|m}} milésimo ducentésimo trigésimo segundo milésimo ducentésimo trigésimo segundo
Sim {{#invoke:Extenso/Ordinal|extenso|1232|f}} milésima ducentésima trigésima segunda milésima ducentésima trigésima segunda
Sim {{#invoke:Extenso/Ordinal|extenso|1232}} milésimo ducentésimo trigésimo segundo milésimo ducentésimo trigésimo segundo
Sim {{#invoke:Extenso/Ordinal|extenso|999999999999999}} novecentos e noventa e nove trilionésimo novecentos e noventa e nove bilhonésimo novecentos e noventa e nove milhonésimo novecentos e noventa e nove milésimo noningentésimo nonagésimo nono novecentos e noventa e nove trilionésimo novecentos e noventa e nove bilhonésimo novecentos e noventa e nove milhonésimo novecentos e noventa e nove milésimo noningentésimo nonagésimo nono
Sim {{#invoke:Extenso/Ordinal|extenso|999999999999999|f}} novecentas e noventa e nove trilionésima novecentas e noventa e nove bilhonésima novecentas e noventa e nove milhonésima novecentas e noventa e nove milésima noningentésima nonagésima nona novecentas e noventa e nove trilionésima novecentas e noventa e nove bilhonésima novecentas e noventa e nove milhonésima novecentas e noventa e nove milésima noningentésima nonagésima nona
Sim {{#invoke:Extenso/Ordinal|extenso|9999999999999999}}
Sim {{#invoke:Extenso/Ordinal|extenso|9999999999999999|f}}


Ver também[editar código-fonte]

local p = {}
local cardinal = require('Módulo:Extenso/Cardinal')

-- unidades sem flexão de gênero
local unidades = {
	[1] = 'primeir',
	[2] = 'segund',
	[3] = 'terceir',
	[4] = 'quart',
	[5] = 'quint',
	[6] = 'sext',
	[7] = 'sétim',
	[8] = 'oitav',
	[9] = 'non'
}

-- dezenas sem flexão de gênero
local dezenas = {
	[1] = 'décim',
	[2] = 'vigésim',
	[3] = 'trigésim',
	[4] = 'quadragésim',
	[5] = 'quinquagésim',
	[6] = 'sexagésim',
	[7] = 'septuagésim',
	[8] = 'octogésim',
	[9] = 'nonagésim'
}

-- centenas sem flexão de gênero
local centenas = {
	[1] = 'centésim',
	[2] = 'ducentésim',
	[3] = 'tricentésim',
	[4] = 'quadringentésim',
	[5] = 'quingentésim',
	[6] = 'seiscentésim',
	[7] = 'setingentésim',
	[8] = 'octingentésim',
	[9] = 'noningentésim'
}

-- unidade recebe um valor de um dígito e devolve o número ordinal por extenso correspondente
local unidade = function(valor, sufixo)
	local sufixo = sufixo
	local valor = tonumber(valor)
	if valor == 0 then
		return ''
	else
		return unidades[valor]..sufixo
	end
end

-- dezena recebe um valor de dois dígitos e devolve o número ordinal por extenso correspondente
local dezena = function(valor, sufixo)
	local sufixo = sufixo
	local valor = tonumber(valor)
	if valor == 0 then
		return ''
	elseif valor < 10 then
		return unidade(valor, sufixo)
	else
		return dezenas[math.floor(valor/10)] .. sufixo .. ' ' .. unidade(valor%10, sufixo)
	end
end

-- centena recebe um valor de três dígitos e devolve o número ordinal por extenso correspondente
local centena = function(valor, sufixo)
	local sufixo = sufixo
	local valor = tonumber(valor)
	if valor == 0 then
		return ''
	elseif valor < 100 then
		return dezena(valor, sufixo)
	else
		return centenas[math.floor(valor/100)] .. sufixo .. ' '.. dezena(valor%100, sufixo)
	end
end

-- milhar recebe um valor de quatro a seis dígitos e devolve o número ordinal por extenso correspondente
local milhar = function(valor, sufixo)
	local sufixo = sufixo
	local valor = tonumber(valor)
	local genero = 'm'
	
	if sufixo == 'a' then
		genero = 'f'
	end
	if valor == 0 then
		return ''
	elseif (math.floor(valor/1000)) == 1 then
		return 'milésim' .. sufixo .. ' ' .. centena(valor%1000, sufixo)
	else
		return cardinal.extenso_module(math.floor(valor/1000), genero) .. ' milésim' .. sufixo .. ' ' .. centena(valor%1000, sufixo)
	end
end

-- milhao recebe um valor de sete a nove dígitos e devolve o número ordinal por extenso correspondente
local milhao = function(valor, sufixo)
	local sufixo = sufixo
	local valor = tonumber(valor)
	local genero = 'm'
	if sufixo == 'a' then
		genero = 'f'
	end
	if valor == 0 then
		return ''
	elseif (math.floor(valor/1000000)) == 1 then
		return 'milhonésim' .. sufixo .. ' ' .. milhar(valor%1000000, sufixo)
	else
		return cardinal.extenso_module(math.floor(valor/1000000), genero).. ' milhonésim' .. sufixo .. ' ' .. milhar(valor%1000000, sufixo)
	end
end

-- bilhao recebe um valor de dez a doze dígitos e devolve o número ordinal por extenso correspondente
local bilhao = function(valor, sufixo)
	local sufixo = sufixo
	local valor = tonumber(valor)
	local genero = 'm'
	
	if sufixo == 'a' then
		genero = 'f'
	end
	if valor == 0 then
		return ''
	elseif (math.floor(valor/1000000000)) == 1 then
		return 'bilhonésim' .. sufixo .. ' ' .. milhao(valor%1000000000, sufixo)
	else
		return cardinal.extenso_module(math.floor(valor/1000000000), genero).. ' bilhonésim' .. sufixo .. ' ' .. milhao(valor%1000000000, sufixo)
	end
end

-- trilhao recebe um valor de treze a quize dígitos e devolve o número ordinal por extenso correspondente
local trilhao = function(valor, sufixo)
	local sufixo = sufixo
	local valor = tonumber(valor)
	local genero = 'm'
	
	if sufixo == 'a' then
		genero = 'f'
	end
	if valor == 0 then
		return ''
	elseif (math.floor(valor/1000000000000)) == 1 then
		return 'trilionésim' .. sufixo .. ' ' .. bilhao(valor%1000000000000, sufixo)
	else
		return cardinal.extenso_module(math.floor(valor/1000000000000), genero).. ' trilionésim' .. sufixo .. ' ' .. bilhao(valor%1000000000000, sufixo)
	end
end

-- _extenso recebe os argumentos, não o objeto frame e devolve o número ordinal correspodente por extenso
function p._extenso(args)
	local f = {}
	f.args = args
	return p.extenso(f)
end


-- extenso recebe os argumentos de chamada pelo usuário ou por outro módulo
-- e devolve o número ordinal correspondente por extenso.
function p.extenso(frame)
	local valor = tostring(frame.args[1]) or tostring(frame.args.valor)
	local genero = frame.args[2] or frame.args.flexao or 'm'
	local padrao = #valor
	local sufixo = 'o'
	
	if genero == 'f' then
		sufixo = 'a'
	end
	
	if padrao == 1 then --u
		return unidade(valor, sufixo)
	elseif padrao == 2 then --d
		return dezena(valor, sufixo)
	elseif padrao == 3 then --c
		return centena(valor, sufixo)
	elseif padrao <= 6 then --m
		return milhar(valor, sufixo)
	elseif padrao <= 9 then --M
		return milhao(valor, sufixo)
	elseif padrao <= 12 then --B
		return bilhao(valor, sufixo)
	elseif padrao <= 15 then --T
		return trilhao(valor, sufixo)
	else
		return ''
	end
end

return p