Skip to content

Biblioteca completa para escrever números por extenso.

License

Notifications You must be signed in to change notification settings

amandio/extenso.js

 
 

Repository files navigation

Extenso.js

Status Doar

Biblioteca completa para escrever números por extenso.

Características

  • Aceita números até duodecilhões.
  • Aceita números negativos.
  • Aceita números decimais.
  • Aceita configuração de dialetos diferentes.
  • Aceita configuração de genero (masculino/feminino).
  • Aceita valores monetários (Reais, Euros, e está apto para +).

Instalação

Instale-o com npm ou yarn:

  • npm: npm install extenso.
  • yarn: yarn add extenso.

Uso

var extenso = require('extenso')

Sintaxe

extenso(number, [options])

number

Obs.: Existência obrigatória.

  • Tipo: string ou number

O valor numérico que deverá ser escrito por extenso.

Se o valor for do tipo number, então ele deve ser um número inteiro seguro, ou seja, ele deve ser válido com Number.isSafeInteger(). Porém, é altamente recomendado que os números sejam passados dentro de strings devido ao fato que, no JavaScript, números (do tipo number) maiores que 9 quatrilhões perdem valores, ou seja, são imprecisos (leia este artigo no Tableless para mais informações).

Números envolvidos em strings deverão seguir o formato natural de escrita de números na língua portuguesa. Você pode usar - no início do número para representar a negatividade, . para representar a separção de milhares (isso é só para semântica e não causa efeitos no retorno) e , para reprentar a separação dos números inteiros e dos números decimais.

Observe que o uso do . para separar milhares não é obrigatório, no entanto, se você for usá-lo ele deve obedecer estritamente a regra de escrita, por exemplo, 1.000.000 é um número válido que será aceito, mas 1.000000 retornará um erro.

options

Obs.: Existência opcional.

  • Tipo: object

Lista de opções válidas e o tipo do seu valor.

  • mode - string
  • locale - string
  • negative - string
  • currency - object
  • currency.type - string
  • number - object
  • number.gender - string
  • number.decimal - string

mode

Define o modo de escrita do número.

Pode ser:

  • number (valor padrão) - Para escrever números simples.
  • currency - Para escrever valores monetários.
Exemplo
extenso('42') // 'quarenta e dois'
extenso('42', { mode: 'number' }) // 'quarenta e dois'
extenso('42', { mode: 'currency' }) // 'quarenta e dois reais'

negative

Define o modo de escrita do valor negativo.

  • formal (valor padrão) - Para escrever o número no modo formal.
  • informal - Para escrever o número no modo informal.
Exemplo
extenso('42') // 'quarenta e dois negativo'
extenso('42', { negative: 'formal' }) // 'quarenta e dois negativo'
extenso('42', { negative: 'informal' }) // 'menos quarenta e dois'

locale

Define a localização para o modo de escrita.

A escrita de alguns números pode váriar de país para país (e talvez até de região para região), por exemplo, o número 16 é escrito dezesseis no Brasil, enquanto que em Portugal é escrito dezasseis. A configuração dessas diferenças é feita aqui.

  • br (valor padrão) - Para escrever no dialeto do Brasil.
  • pt - Para escrever no dialeto de Portugal.
Exemplo
extenso('16') // 'dezesseis'
extenso('16', { locale: 'br' }) // 'dezesseis'
extenso('16', { locale: 'pt' }) // 'dezasseis'

currency.type

Define o código ISO da moeda em que o número deverá ser escrito.

  • BRL (valor padrão) - Para escrever valores em Real (moeda brasileira).
  • EUR - Para escrever valores em Euro (moeda da maior parte da União Européia).
  • ECV - Para escrever valores em Escudo (moeda de Cabo Verde).
Exemplo
extenso('42', { mode: 'currency' }) // 'quarenta e dois reais'
extenso('42', { mode: 'currency', currency: { type: 'BRL' } }) // 'quarenta e dois reais'
extenso('42', { mode: 'currency', currency: { type: 'EUR' } }) // 'quarenta e dois euros'
extenso('42', { mode: 'currency', currency: { type: 'ECV' } }) // 'quarenta e dois escudos'

number.gender

Define o gênero do número que será escrito.

Alguns números podem ser representados tanto no modo masculino quanto no modo feminino, por exemplo, 42 pode ser escrito como quarenta e dois ou 42 ou quarenta e duas.

  • m (valor padrão) - Para escrever no modo masculino.
  • f - Para escrever no modo feminino.
Exemplo
extenso('42') // 'quarenta e dois'
extenso('42', { number: { gender: 'm' } }) // 'quarenta e dois'
extenso('42', { number: { gender: 'f' } }) // 'quarenta e duas'

number.decimal

Define o modo de escrita do valor decimal.

  • formal (valor padrão) - Para escrever no modo formal.
  • informal - Para escrever no modo informal.
Exemplo
extenso('3.14') // 'três inteiros e quatorze centésimos'
extenso('3.14', { number: { decimal: 'formal' } }) // 'três inteiros e quatorze centésimos'
extenso('3.14', { number: { decimal: 'informal' } }) // 'três vírgula quatorze'

Contribuição

Oi, você é de Portugal, Angola, Moçambique ou qualquer outro país que usa fala português? Viu alguma escrita de números que é diferente no seu país? Então abra uma issue e vamos discutir como adaptar essas caracteristicas ao projeto para deixá-lo o mais completo possível.

Viu algum erro ou qualquer coisa que pode ser melhorada?

Você pode, portanto:

  • Abrir uma issue.
  • Enviar um pull request.
  • Comentar no trecho do código que você acredita que pode ser melhorado.

Regras

Tendo em vista a participação de falantes da língua portuguesa, escreva:

  • Nome de váriaveis, funções e outras coisas do tipo em inglês.
  • Nome dos arquivos e diretórios em inglês.
  • Issues, pull requests e comentários em português.
  • Descrição dos testes em português.
    • REGRA 1: Deve ter o formato: Deve(m) + verbo + descrição.
    • REGRA 2: Nunca use ponto final na descrição.
  • Mensagem de commits em português.
    • REGRA 1: Inicie-os sempre em caixa alta.
    • REGRA 2: Nunca use ponto final na descrição.

TODO

  • Traduzir o README.md em inglês (README-en.md).

Ajuda-me

Usa ou gosta desse e outros projetos mantindos por mim?

Você pode me ajudar com uma doação.

Link para doar

Licença

MIT © Matheus Alves

About

Biblioteca completa para escrever números por extenso.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%