Convierte numero a letras

Convierte numero a letras

Postby Willi Quintana » Fri Feb 29, 2008 2:10 pm

Dejo esta utilidad para el foro-...
Salu2

Code: Select all  Expand view

//-------------------------------------------------------------------------------------------------------
Function Letras(Arg1, Arg2)      // el numero y el genero
local agrupos[5], aunidad[10], adecena[10, 10], acentena[10]
local aconector[5], cenletra, ngrupo, cnumstr
local cunidad, cdecena, ccentena, ccentavos, cdecim
Arg2 := If(Arg2 = Nil, Arg2:= "M", Upper(Arg2) )
If (ValType(Arg1) != "N" .OR. ValType(Arg2) != "C")
 Return ""
Endif
cdecim := (Arg1 - Int(Arg1)) * 100
ccentavos := " y " + StrZero(cdecim, 2) + "/100"
Arg1 := Int(Arg1)    // solo el entero

aunidad[1]:= {|| iif(Arg1 = 0 .AND. ngrupo = 1, "cero", "")}
aunidad[2]:= {|| iif(cdecena = "1", adecena[2][Val(cunidad) + 1], ;
   iif(agrupos[ngrupo] = "001" .AND. (ngrupo = 2 .OR. ngrupo = ;
      4), "", iif(ngrupo > 2, "un ", iif(Arg2 = "F", "una ", ;
      "uno "))))}
aunidad[3]:= {|| iif(cdecena = "1", adecena[2][Val(cunidad) + 1], ;
      "dos ")}
aunidad[4]:= {|| iif(cdecena = "1", adecena[2][Val(cunidad) + 1], ;
      "tres ")}
aunidad[5]:= {|| iif(cdecena = "1", adecena[2][Val(cunidad) + 1], ;
      "cuatro ")}
aunidad[6]:= {|| iif(cdecena = "1", adecena[2][Val(cunidad) + 1], ;
      "cinco ")}
aunidad[7]:= {|| iif(cdecena = "1", adecena[2][Val(cunidad) + 1], ;
      "seis ")}
aunidad[8]:= {|| iif(cdecena = "1", adecena[2][Val(cunidad) + 1], ;
      "siete ")}
aunidad[9]:= {|| iif(cdecena = "1", adecena[2][Val(cunidad) + 1], ;
      "ocho ")}
aunidad[10]:= {|| iif(cdecena = "1", ;
      adecena[2][Val(cunidad) + 1], "nueve ")}
adecena[1][1]:= {|| ""}
adecena[2][1]:= {|| iif(cunidad = "0", "diez ", "")}
adecena[2][2]:= "once "
adecena[2][3]:= "doce "
adecena[2][4]:= "trece "
adecena[2][5]:= "catorce "
adecena[2][6]:= "quince "
adecena[2][7]:= "dieciseis "
adecena[2][8]:= "diecisiete "
adecena[2][9]:= "dieciocho "
adecena[2][10]:= "diecinueve "
adecena[3][1]:= {|| iif(cunidad = "0", "veinte ", "veinti")}
adecena[4][1]:= {|| "treinta " + iif(cunidad != "0", "y ", "")}
adecena[5][1]:= {|| "cuarenta " + iif(cunidad != "0", "y ", "")}
adecena[6][1]:= {|| "cincuenta " + iif(cunidad != "0", "y ", "")}
adecena[7][1]:= {|| "sesenta " + iif(cunidad != "0", "y ", "")}
adecena[8][1]:= {|| "setenta " + iif(cunidad != "0", "y ", "")}
adecena[9][1]:= {|| "ochenta " + iif(cunidad != "0", "y ", "")}
adecena[10][1]:= {|| "noventa " + iif(cunidad != "0", "y ", "")}
acentena[1]:= {|| ""}
acentena[2]:= {|| iif(cdecena + cunidad = "00", "cien ", ;
      "ciento ")}
acentena[3]:= {|| "doscient" + iif(ngrupo < 3 .AND. Arg2 = "F", ;
      "as ", "os ")}
acentena[4]:= {|| "trescient" + iif(ngrupo < 3 .AND. Arg2 = "F", ;
      "as ", "os ")}
acentena[5]:= {|| "cuatrocient" + iif(ngrupo < 3 .AND. Arg2 = ;
      "F", "as ", "os ")}
acentena[6]:= {|| "quinient" + iif(ngrupo < 3 .AND. Arg2 = "F", ;
      "as ", "os ")}
acentena[7]:= {|| "seiscient" + iif(ngrupo < 3 .AND. Arg2 = "F", ;
      "as ", "os ")}
acentena[8]:= {|| "setecient" + iif(ngrupo < 3 .AND. Arg2 = "F", ;
      "as ", "os ")}
acentena[9]:= {|| "ochocient" + iif(ngrupo < 3 .AND. Arg2 = "F", ;
      "as ", "os ")}
acentena[10]:= {|| "novecient" + iif(ngrupo < 3 .AND. Arg2 = "F", ;
      "as ", "os ")}
aconector[1]:= {|| ""}
aconector[2]:= {|| iif(agrupos[2] > "000", "mil ", "")}
aconector[3]:= {|| iif(agrupos[3] > "000" .OR. agrupos[4] > ;
      "000", iif(agrupos[3] = "001", "millon ", "millones "), "")}
aconector[4]:= {|| iif(agrupos[4] > "000", "mil ", "")}
aconector[5]:= {|| iif(agrupos[5] > "000", iif(agrupos[5] = ;
      "001", "billon ", "billones "), "")}
cnumstr:= alltrim(Str(Arg1, 15, 0))
cnumstr:= Replicate("0", 15 - Len(cnumstr)) + cnumstr
For ngrupo:= 1 to 5
   agrupos[5 - ngrupo + 1]:= SubStr(cnumstr, (ngrupo - 1) * 3 + 1, 3)
Next
cenletra:= ""
For ngrupo:= 5 to 1 step -1
   cunidad:= right(agrupos[ngrupo], 1)
   cdecena:= SubStr(agrupos[ngrupo], 2, 1)
   ccentena:= Left(agrupos[ngrupo], 1)
   cenletra:= cenletra + eval(acentena[Val(ccentena) + 1]) + ;
              eval(adecena[Val(cdecena) + 1][1]) + ;
              eval(aunidad[Val(cunidad) + 1]) + eval(aconector[ngrupo])
Next
Return Upper(cenletra) + ccentavos

 
User avatar
Willi Quintana
 
Posts: 1019
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Convierte numero a letras

Postby Jairo Barbosa » Wed Mar 28, 2012 5:47 pm

User avatar
Jairo Barbosa
 
Posts: 194
Joined: Fri Jan 23, 2009 2:50 am
Location: Cali Valle Colombia


Return to Utilities / Utilidades

Who is online

Users browsing this forum: No registered users and 19 guests