Skip to main content

spellmoney

Convierte montos numéricos a letras, con el formato exacto que exigen los documentos legales y financieros — cheques, facturas, recibos y contratos: CIENTO VEINTICINCO DÓLARES CON 50/100.

PyPI Python Tests License Dependencies Idiomas

Existe también el puerto a TypeScript/JavaScript — misma lógica, mismos datos de moneda, mismo resultado exacto — para quien trabaja en Node.

Instalación

pip install spellmoney

Uso

from spellmoney import a_letras

a_letras(125.50)
# 'CIENTO VEINTICINCO DÓLARES CON 50/100'

a_letras(1, moneda="GTQ")
# 'UN QUETZAL CON 00/100'

a_letras(21000000, moneda="EUR")
# 'VEINTIÚN MILLONES DE EUROS CON 00/100'

a_letras(2, moneda="GBP", mayusculas=False)
# 'dos libras esterlinas con 00/100'

a_letras(10.50, centavos="palabras")
# 'DIEZ DÓLARES CON CINCUENTA CENTAVOS'

a_letras("125.50")
# 'CIENTO VEINTICINCO DÓLARES CON 50/100'  (lectura decimal exacta)

Otros idiomas

a_letras(125.50, idioma="en")
# 'ONE HUNDRED TWENTY-FIVE DOLLARS AND 50/100'

a_letras(125.50, idioma="pt", moneda="BRL")
# 'CENTO E VINTE E CINCO REAIS E 50/100'

a_letras(125.50, idioma="fr", moneda="EUR")
# 'CENT VINGT-CINQ EUROS ET 50/100'

Solo el número, sin moneda

from spellmoney import (
    numero_a_letras,
    numero_a_letras_en,
    numero_a_letras_pt,
    numero_a_letras_fr,
)

numero_a_letras(1000000)        # 'un millón'
numero_a_letras(1000000000)     # 'mil millones'   (¡no "un billón"!)
numero_a_letras(1000000000000)  # 'un billón'

numero_a_letras_en(1000000000)  # 'one billion'    (escala corta del inglés)

numero_a_letras_pt(21, "f")     # 'vinte e uma'    (concordancia de género)

numero_a_letras_fr(71)          # 'soixante et onze'  (base vigesimal del francés)

Monedas soportadas

Las 154 divisas activas del estándar ISO 4217. La cobertura varía según el idioma:

Idioma Divisas cubiertas
es (español) 154 — todas
en (inglés) 154 — todas
pt (portugués, Brasil) 46 — países lusófonos + las divisas más usadas del mundo
fr (francés) 45 — países francófonos + las divisas más usadas del mundo

Si se pide una combinación de moneda e idioma que aún no existe, a_letras lanza SpellMoneyError con un mensaje explicando exactamente qué falta, en vez de fallar en silencio.

🙋 Ayuda buscada

Portugués y francés todavía tienen huecos en divisas regionales. Los pasos exactos para contribuir (fork, rama, pruebas, Pull Request) están en CONTRIBUTING.md — en español e inglés.

API

Función Descripción
a_letras(monto, moneda="USD", idioma="es", centavos="fraccion", mayusculas=True) Convierte un monto con nombre de moneda. monto puede ser int, float, Decimal o cadena decimal.
numero_a_letras(n) Solo el número, en español.
numero_a_letras_en(n) Solo el número, en inglés.
numero_a_letras_pt(n, genero="m") Solo el número, en portugués.
numero_a_letras_fr(n) Solo el número, en francés.
MONEDAS Catálogo de las 154 divisas ISO 4217.
IDIOMAS ("es", "en", "pt", "fr").
SpellMoneyError Error lanzado ante un monto, moneda o idioma inválidos.

Parámetros de a_letras:

  • montoint, float, Decimal o cadena decimal ("125.50").
  • moneda — código ISO 4217. Por defecto "USD".
  • idioma"es", "en", "pt" o "fr". Por defecto "es".
  • centavos"fraccion" escribe 50/100; "palabras" escribe CINCUENTA CENTAVOS.
  • mayusculasTrue devuelve el resultado en mayúsculas; False, en minúsculas.

Rango soportado

Enteros de 0 a 999,999,999,999,999. Un monto fuera de ese rango lanza SpellMoneyError, igual que un monto negativo, una moneda no reconocida o un idioma no soportado.

Redondeo y precisión

Un monto se puede pasar como float, como Decimal o como cadena decimal, y la diferencia importa:

  • Cadena o Decimala_letras("125.50"), a_letras(Decimal("125.50")): los dígitos se leen tal como fueron escritos, sin pasar por punto flotante. El redondeo del tercer decimal en adelante es half-up exacto, así que "2.675" da 68/100. Es la vía recomendada cuando el monto viene de una base de datos, un formulario o un archivo.
  • floata_letras(125.50): los montos de dos decimales se convierten de forma exacta. Verificado sobre el millón de montos de 0.00 a 9999.99: ninguna diferencia frente a aritmética decimal exacta. Con tres o más decimales, el empate exacto se resuelve según el valor binario que el float almacena realmente, que puede quedar apenas por debajo del decimal escrito: 2.675 da 67/100. Es una propiedad del tipo float, no de esta librería.

Desarrollo

git clone https://github.com/brandriver-bit/spellmoney.git
cd spellmoney
pip install -e ".[dev]"
pytest

Licencia

MIT — ver LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spellmoney-1.1.0.tar.gz (21.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spellmoney-1.1.0-py3-none-any.whl (17.7 kB view details)

Uploaded Python 3

File details

Details for the file spellmoney-1.1.0.tar.gz.

File metadata

  • Download URL: spellmoney-1.1.0.tar.gz
  • Upload date:
  • Size: 21.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.10

File hashes

Hashes for spellmoney-1.1.0.tar.gz
Algorithm Hash digest
SHA256 e2fbb9c1c2dbb1db4e8189d1c193f5787308d5790438ebbfae2e18c63cedf814
MD5 104218382ccba929bbc89dd6d4519848
BLAKE2b-256 0b1a374b22e9549f3e7548fce47e4da745e88cd5f44b5084f54c145a7df926a4

See more details on using hashes here.

File details

Details for the file spellmoney-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: spellmoney-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.10

File hashes

Hashes for spellmoney-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7f7ba09fe3770992936ea38d59134b8c2d103eca64ec7c8aeacf452aea3a76e4
MD5 e82c619069de36ef0813498d5efcdf3c
BLAKE2b-256 9a74b44c8405286d3343425c3e52f198c4e131fc221cff3e67dfa63acda91913

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page