numbers_to_letters.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # -*- coding: utf-8 -*-
  2. import unittest
  3. def numero_to_letras(numero):
  4. indicador = [("",""),("MIL","MIL"),("MILLON","MILLONES"),("MIL","MIL"),("BILLON","BILLONES")]
  5. entero = int(numero)
  6. decimal = int(round((numero - entero)*100))
  7. #print 'decimal : ',decimal
  8. contador = 0
  9. numero_letras = ""
  10. numero_letrasd = ""
  11. while entero >0:
  12. a = entero % 1000
  13. if contador == 0:
  14. en_letras = convierte_cifra(a,1).strip()
  15. else :
  16. en_letras = convierte_cifra(a,0).strip()
  17. if a==0:
  18. numero_letras = en_letras+" "+numero_letras
  19. elif a==1:
  20. if contador in (1,3):
  21. numero_letras = indicador[contador][0]+" "+numero_letras
  22. else:
  23. numero_letras = en_letras+" "+indicador[contador][0]+" "+numero_letras
  24. else:
  25. numero_letras = en_letras+" "+indicador[contador][1]+" "+numero_letras
  26. numero_letras = numero_letras.strip()
  27. contador = contador + 1
  28. entero = int(entero / 1000)
  29. contadord=0
  30. while decimal >0:
  31. d = decimal % 1000
  32. if contadord == 0:
  33. en_letrasd = convierte_cifra(d,1).strip()
  34. numero_letrasd =" COM "+str(en_letrasd.strip())
  35. contadord = contadord + 1
  36. decimal = int(decimal / 1000)
  37. numero_letras = numero_letras+ str(numero_letrasd)
  38. # print 'numero: ',numero
  39. # print numero_letras
  40. return numero_letras
  41. def convierte_cifra(numero,sw):
  42. lista_centana = ["",("CIEN","CIENTO"),"DOSCIENTOS","TRESCIENTOS","CUATROCIENTOS","QUINIENTOS","SEISCIENTOS","SETECIENTOS","OCHOCIENTOS","NOVECIENTOS"]
  43. lista_decena = ["",("DIEZ","ONCE","DOCE","TRECE","CATORCE","QUINCE","DIECISEIS","DIECISIETE","DIECIOCHO","DIECINUEVE"),
  44. ("VEINTE","VEINTI"),("TREINTA","TREINTA Y "),("CUARENTA" , "CUARENTA Y "),
  45. ("CINCUENTA" , "CINCUENTA Y "),("SESENTA" , "SESENTA Y "),
  46. ("SETENTA" , "SETENTA Y "),("OCHENTA" , "OCHENTA Y "),
  47. ("NOVENTA" , "NOVENTA Y ")
  48. ]
  49. lista_unidad = ["",("UN" , "UNO"),"DOS","TRES","CUATRO","CINCO","SEIS","SIETE","OCHO","NUEVE"]
  50. centena = int (numero / 100)
  51. decena = int((numero -(centena * 100))/10)
  52. unidad = int(numero - (centena * 100 + decena * 10))
  53. #print "centena: ",centena, "decena: ",decena,'unidad: ',unidad
  54. texto_centena = ""
  55. texto_decena = ""
  56. texto_unidad = ""
  57. #Validad las centenas
  58. texto_centena = lista_centana[centena]
  59. if centena == 1:
  60. if (decena + unidad)!=0:
  61. texto_centena = texto_centena[1]
  62. else :
  63. texto_centena = texto_centena[0]
  64. #Valida las decenas
  65. texto_decena = lista_decena[decena]
  66. if decena == 1 :
  67. texto_decena = texto_decena[unidad]
  68. elif decena > 1 :
  69. if unidad != 0 :
  70. texto_decena = texto_decena[1]
  71. else:
  72. texto_decena = texto_decena[0]
  73. #Validar las unidades
  74. #print "texto_unidad: ",texto_unidad
  75. if decena != 1:
  76. texto_unidad = lista_unidad[unidad]
  77. if unidad == 1:
  78. texto_unidad = texto_unidad[sw]
  79. return "%s %s %s" %(texto_centena,texto_decena,texto_unidad)