25 de septiembre de 2002

Convertir Números a Letras

Usuarios de Visual Foxpro®: Espero que les sea util esta rutina, convierte números hasta 999,999,999,999.99 y con gusto la comparto con Uds.
Function Convnum(Total)
  * Autor: Anselmo Antonio Ortiz Alcocer
  * Corrreo: ortizanst@hotmail.com
  * 26/06/2001
  Dimension aUnidades(9), aDecenas(14), aCentenas(10)
  aUnidades(1) = 'UN'
  aUnidades(2) = 'DOS'
  aUnidades(3) = 'TRES'
  aUnidades(4) = 'CUATRO'
  aUnidades(5) = 'CINCO'
  aUnidades(6) = 'SEIS'
  aUnidades(7) = 'SIETE'
  aUnidades(8) = 'OCHO'
  aUnidades(9) = 'NUEVE'
  aDecenas(1) = 'DIEZ'
  aDecenas(2) = 'ONCE'
  aDecenas(3) = 'DOCE'
  aDecenas(4) = 'TRECE'
  aDecenas(5) = 'CATORCE'
  aDecenas(6) = 'QUINCE'
  aDecenas(7) = 'VEINTE'
  aDecenas(8) = 'TREINTA'
  aDecenas(9) = 'CUARENTA'
  aDecenas(10) = 'CINCUENTA'
  aDecenas(11) = 'SESENTA'
  aDecenas(12) = 'SETENTA'
  aDecenas(13) = 'OCHENTA'
  aDecenas(14) = 'NOVENTA'
  aCentenas(1) = 'CIEN'
  aCentenas(2) = 'DOSCIENTOS'
  aCentenas(3) = 'TRESCIENTOS'
  aCentenas(4) = 'CUATROCIENTOS'
  aCentenas(5) = 'QUINIENTOS'
  aCentenas(6) = 'SEISCIENTOS'
  aCentenas(7) = 'SETECIENTOS'
  aCentenas(8) = 'OCHOCIENTOS'
  aCentenas(9) = 'NOVECIENTOS'

  vTotal = str(int(Total), 12)

  Do case
    Case empty(val(vTotal))
      Texto = 'CERO PESOS'

    Case val(vTotal) = 1
      Texto = 'UN PESO'

    Otherwise
      tCientos     = obt_cant(substr(vTotal,10,3))
      tMiles       = obt_cant(substr(vTotal,7,3))
      tMillones    = obt_cant(substr(vTotal,4,3))
      tMilMillones = obt_cant(substr(vTotal,1,3))

      tCientos = tCientos
      tMiles = iif(empty(tMiles), '', ;
               iif(tMiles='UN', '', tMiles + ' ') + 'MIL ')
      tMillones = iif(empty(tMillones), '', ;
               tMillones + ' MILLON' + iif(tMillones='UN', ' ', 'ES ') +;
               iif(empty(tMiles + tCientos), 'DE', ''))
      tMilMillones = iif(empty(tMilMillones), '', ;
               iif(tMilMillones='UN', '', tMilMillones + ' ') + 'MIL ' +; 
               iif(empty(tMillones), 'MILLONES ', ' ') +;
               iif(empty(tMillones + tMiles + tCientos), 'DE', ''))

      Texto = strtran(tMilMillones + tMillones + tMiles + tCientos, '  ', ' ') + ' PESOS'
  Endcase
  
Return Texto + iif(!empty(Total), ' CON ' + ;
   strtran(transform(int((total - int(total)) * ;
   100), '**'), '*', '0') + '/100 M.N.', '')

Function obt_cant(valor)
  Public Unidades, Decenas, Centenas

  If empty(val(valor))
    Return ''
  Endif

  Store '' to tUnidades, tDecenas, tCentenas
  Unidades = int(val(substr(valor,3,1)))  &&          123
  Decenas  = int(val(substr(valor,2,1)))  && vTotal = 999
  Centenas = int(val(substr(valor,1,1)))  &&          ^^^
  valor = int(val(valor))

  tUnidades = iif(!empty(unidades), aUnidades(Unidades), '')

  If !empty(decenas)
    If decenas = 1
      tDecenas = iif(val(right(str(valor,3),2)) >= 10 and ;
      val(right(str(valor,3),2)) <= 15, aDecenas(val(right(str(valor,3),2)) - 9), 'DIECI' + tUnidades)
      tUnidades = ''
    Else
      tDecenas = aDecenas(decenas + 5)
      if !empty(unidades)
        tDecenas = left(tDecenas, len(tDecenas) - 1) + 'I'
      Endif
    Endif
  Endif

  If !empty(centenas)
    tCentenas = aCentenas(centenas)
    If valor > 100
      If centenas = 1
        tCentenas = tCentenas + 'TO '
      Else
        tCentenas = tCentenas + ' '
      Endif
    Endif
  Endif
  
Return tCentenas + tDecenas + tUnidades
Anselmo Antonio Ortiz Alcocer

2 comentarios :

  1. Gracias. Me resolvió un gran problema.

    ResponderBorrar
  2. Hola, no se como implementarlo, me puedes ayudar a como usar el codigo, donde colocarlo, ejemplo, tengo dos cajas de texto y un boton, como seria?

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.