Número a Texto
Una función que convierte las cantidades numéricas en texto.
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- UNIDADES = ( '', 'UN ', 'DOS ', 'TRES ', 'CUATRO ', 'CINCO ', 'SEIS ', 'SIETE ', 'OCHO ', 'NUEVE ', 'DIEZ ', 'ONCE ', 'DOCE ', 'TRECE ', 'CATORCE ', 'QUINCE ', 'DIECISEIS ', 'DIECISIETE ', 'DIECIOCHO ', 'DIECINUEVE ', 'VEINTE '
- )
- DECENAS = ('VENTI', 'TREINTA ', 'CUARENTA ', 'CINCUENTA ', 'SESENTA ', 'SETENTA ', 'OCHENTA ', 'NOVENTA ', 'CIEN ' )
- CENTENAS = ('CIENTO ', 'DOSCIENTOS ', 'TRESCIENTOS ', 'CUATROCIENTOS ', 'QUINIENTOS ', 'SEISCIENTOS ', 'SETECIENTOS ', 'OCHOCIENTOS ', 'NOVECIENTOS ' )
- def NumberToText(number_in):
-
- if len(str(number_in)) > 9:
- raise ValueError(u"¡Fuera de rango! El límite es 9 numeros = 999999999")
-
- convertido = ''
- number_str = str(number_in) if (type(number_in) != 'str') else number_in
- number_str = number_str.zfill(9)
- millones, miles, cientos = number_str[:3], number_str[3:6], number_str[6:]
-
- if(millones):
- if(millones == '001'):
- convertido += 'UN MILLON '
- elif(int(millones) > 0):
- convertido += '%sMILLONES ' % __convertNumber(millones)
-
- if(miles):
- if(miles == '001'):
- convertido += 'MIL '
- elif(int(miles) > 0):
- convertido += '%sMIL ' % __convertNumber(miles)
-
- if(cientos):
- if(cientos == '001'):
- convertido += 'UN '
- elif(int(cientos) > 0):
- convertido += '%s ' % __convertNumber(cientos)
-
- if convertido[-3:] == "UN ": #si el ultimo es (UN) cambiarlo por (UNO)
- convertido = convertido[:-1]+"O"
-
- return convertido
- def __convertNumber(n):
- output = ''
-
- if(n == '100'):
- output = "CIEN "
-
- elif(n[0] != '0'):
- output = CENTENAS[int(n[0])-1]
- k = int(n[1:])
-
- if(k <= 20):
- output += UNIDADES[k]
-
- else:
- if((k > 30) & (n[2] != '0')):
- output += '%sY %s' % (DECENAS[int(n[1])-2], UNIDADES[int(n[2])])
-
- else:
- output += '%s%s' % (DECENAS[int(n[1])-2], UNIDADES[int(n[2])])
-
- return output
- if __name__ == "__main__":
- print( NumberToText(14545547) )