Módulo:Extenso/Ordinal
Aspeto
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âmetro | Descrição | Tipo | Estado | |
---|---|---|---|---|
valor | valor 1 | Número inteiro
| Número | obrigatório |
flexao | flexao 2 | flexão de gênero do número ordinal
| String | recomendado |
Testes unitários[editar código-fonte]
Todos os testes passaram.
Texto | Esperado | Atual | |
---|---|---|---|
{{#invoke:Extenso/Ordinal|extenso|1|m}} | primeiro | primeiro | |
{{#invoke:Extenso/Ordinal|extenso|1|f}} | primeira | primeira | |
{{#invoke:Extenso/Ordinal|extenso|1232|m}} | milésimo ducentésimo trigésimo segundo | milésimo ducentésimo trigésimo segundo | |
{{#invoke:Extenso/Ordinal|extenso|1232|f}} | milésima ducentésima trigésima segunda | milésima ducentésima trigésima segunda | |
{{#invoke:Extenso/Ordinal|extenso|1232}} | milésimo ducentésimo trigésimo segundo | milésimo ducentésimo trigésimo segundo | |
{{#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 | |
{{#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 | |
{{#invoke:Extenso/Ordinal|extenso|9999999999999999}} | |||
{{#invoke:Extenso/Ordinal|extenso|9999999999999999|f}} |
Ver também[editar código-fonte]
A documentação acima é transcluída de Módulo:Extenso/Ordinal/doc. (editar | histórico) Editores podem experimentar nas páginas de teste (criar | espelhar) e de exemplos para testes (criar) deste módulo. Subpáginas deste módulo. |
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