Convertir numeros a letras
Clipper/FiveWin
Publicado el 23 de Julio del 2002 por Claudio
18.768 visualizaciones desde el 23 de Julio del 2002
Este código convierte un valor en su equivalente en texto.
*ESTA FUNCION DEVUELVE EN LETRAS CUALQUIER NUMERO.
*EL RESULTADO SE DEVUELVE EN 3 VARIABLES: LETRA,LETRA1 Y LETRA2 PARA
*PODER IMPRIMIR EN DIFERENTES RENGLONES DE ACUERDO AL ESPACIO QUE SE
*TIENE, LA LONGITUD MAXIMA QUE PUEDE TENER CADA LINEA SE LE DA AL
*LLAMAR A LA FUNCION. EN ESTE EJEMPLO SON 60 CARACTERES. //
* By Claudio F. Frontoni (cfrontoni@velocom.com.ar)
PUBLIC MNUM
CLEAR
MNUM=0
DO WHILE .T.
@ 1,1 SAY "IMGRESE UN NUMERO" GET MNUM PICTURE [999,999,999.99]
READ
IF LASTKEY()=27
EXIT
ENDIF
CLEAR
ALETRAS(MNUM,60)
@ 3,1 SAY LETRA
@ 4,1 SAY LETRA1
@ 5,1 SAY LETRA2
ENDDO
QUIT
****************
FUNCTION ALETRAS
****************
PARAMETERS SUMA,LARGO
PUBLIC LE01,LE02,LE03,LE04,LE05,LE06[9],LE07[20],LE08[9],LE09[9],LETRA1,LETRA2
PUBLIC LE10,LE11,LE12,LE13,LE14,LE15,LE16,LE17,LE18,LE19,LE20,ENTE,DECI,LETRA
STORE 1 TO LE02
STORE 0 TO LE03,LE04
STORE "" TO LE10,ENTE,LE05,DECI,LE01,LE11,LE12,LE13,LE14,LE15,LE16,LE17
STORE "" TO LE18,LE19,LE20,LETRA,LETRA1,LETRA2
LE03=INT(SUMA)
LE04=VAL(RIGHT(STR(SUMA-INT(SUMA),11,2),2))
LE06[1]="UNO"
LE06[2]="DOS"
LE06[3]="TRES"
LE06[4]="CUATRO"
LE06[5]="CINCO"
LE06[6]="SEIS"
LE06[7]="SIETE"
LE06[8]="OCHO"
LE06[9]="NUEVE"
LE07[1] ="DIEZ"
LE07[2] ="ONCE"
LE07[3] ="DOCE"
LE07[4] ="TRECE"
LE07[5] ="CATORCE"
LE07[6] ="QUINCE"
LE07[7] ="DIECISEIS"
LE07[8] ="DIECISIETE"
LE07[9] ="DIECIOCHO"
LE07[10]="DIECINUEVE"
LE07[11]="VEINTE"
LE07[12]="VEINTIUNO"
LE07[13]="VEINTIDOS"
LE07[14]="VEINTITRES"
LE07[15]="VEINTICUATRO"
LE07[16]="VEINTICINCO"
LE07[17]="VEINTISEIS"
LE07[18]="VEINTISIETE"
LE07[19]="VEINTIOCHO"
LE07[20]="VEINTINUEVE"
LE08[1]="TREINTA"
LE08[2]="CUARENTA"
LE08[3]="CINCUENTA"
LE08[4]="SESENTA"
LE08[5]="SETENTA"
LE08[6]="OCHENTA"
LE08[7]="NOVENTA"
LE09[1]="CIENTO"
LE09[2]="DOSCIENTOS"
LE09[3]="TRESCIENTOS"
LE09[4]="CUATROCIENTOS"
LE09[5]="QUINIENTOS"
LE09[6]="SEISCIENTOS"
LE09[7]="SETECIENTOS"
LE09[8]="OCHOCIENTOS"
LE09[9]="NOVECIENTOS"
LE01=RIGHT(STR(LE03,11,0),LENNUM(LE03))
IF LEN(LE01)=1
DO UNIDAD
ELSEIF LEN(LE01)=2
DO DECENA
ELSEIF LEN(LE01)=3
DO CENTENA
ELSEIF LEN(LE01)=4
DO MIL
ELSEIF LEN(LE01)=5
DO DMIL
ELSEIF LEN(LE01)=6
DO CMIL
ELSEIF LEN(LE01)=7
DO MILL
ELSEIF LEN(LE01)=8
DO DMILL
ELSEIF LEN(LE01)=9
DO CMILL
ENDIF
ENTE=LE05
LE05=""
IF LE04<>0
LE01=RIGHT(STR(SUMA,14,2),2)
LE02=1
DO DECENA
DECI=LE05
ENDIF
IF .NOT.EMPTY(ENTE).AND.EMPTY(DECI)
LETRA=ENTE+" PESOS"
ENDIF
IF EMPTY(ENTE).AND..NOT.EMPTY(DECI)
LETRA=DECI+" CENTAVOS"
ENDIF
IF .NOT.EMPTY(ENTE).AND..NOT.EMPTY(DECI)
LETRA=ENTE+" PESOS CON "+DECI+" CENTAVOS"
ENDIF
IF RIGHT(LETRA,12)="UNO CENTAVOS"
LETRA=LEFT(LETRA,LEN(LETRA)-12)+"UN CENTAVO"
ENDIF
R=LARGO
IF LEN(LETRA)>LARGO
DO WHILE .T.
IF SUBSTR(LETRA,R,1)=" "
LETRA1=RIGHT(LETRA,LEN(LETRA)-R)
LETRA=LEFT(LETRA,R-1)
EXIT
ELSE
R=R-1
ENDIF
ENDDO
ENDIF
R=LARGO
IF LEN(LETRA1)>LARGO
DO WHILE .T.
IF SUBSTR(LETRA1,R,1)=" "
LETRA2=RIGHT(LETRA1,LEN(LETRA1)-R)
LETRA1=LEFT(LETRA1,R-1)
EXIT
ELSE
R=R-1
ENDIF
ENDDO
ENDIF
RELEASE LE01,LE02,LE03,LE04,LE05,LE06[9],LE07[20],LE08[9],LE09[9]
RELEASE LE10,LE11,LE12,LE13,LE14,LE15,LE16,LE17,LE18,LE19,LE20,ENTE,DECI
RETURN(.T.)
*******************************************
PROCEDURE UNIDAD
LE10=SUBSTR(LE01,LE02,1)
IF EMPTY(LE10).OR.LE10="0"
LE05=""
RETURN
ENDIF
LE05=LE06[VAL(LE10)]
RETURN
*******************************************
PROCEDURE DECENA
LE11=SUBSTR(LE01,LE02,2)
IF LEFT(LE11,1)="0"
LE02=LE02+1
DO UNIDAD
LE02=LE02-1
RETURN
ENDIF
IF VAL(LE11)<30
LE05=LE07[VAL(LE11)-9]
RETURN
ENDIF
LE02=LE02+1
DO UNIDAD
LE02=LE02-1
LE12=LE08[VAL(LEFT(LE11,1))-2]
IF.NOT.EMPTY(LE05)
STORE LE12+" Y "+LE05 TO LE05
ELSE
LE05=LE12
ENDIF
RETURN
*******************************************
PROCEDURE CENTENA
LE13=SUBSTR(LE01,LE02,3)
IF LEFT(LE13,1)="0"
LE02=LE02+1
DO DECENA
LE02=LE02-1
RETURN
ENDIF
LE02=LE02+1
DO DECENA
LE02=LE02-1
LE14=LE09[VAL(LEFT(LE13,1))]
IF .NOT.EMPTY(LE05)
LE05=LE14+" "+LE05
ELSE
LE05=LE14
ENDIF
IF LE05="CIENTO".AND.LEN(LE05)=6
LE05="CIEN"
ENDIF
RETURN
*******************************************
PROCEDURE MIL
IF SUBSTR(LE01,LE02,1)="0"
LE02=LE02+1
DO CENTENA
LE02=LE02-1
RETURN
ENDIF
DO UNIDAD
LE15=LE05
IF LE05="UNO"
LE15="UN"
ENDIF
LE02=LE02+1
DO CENTENA
LE02=LE02-1
IF .NOT.EMPTY(LE05)
LE05=LE15+" MIL "+LE05
ELSE
LE05=LE15+" MIL "
ENDIF
RETURN
*******************************************
PROCEDURE DMIL
IF SUBSTR(LE01,LE02,1)="0"
LE02=LE02+1
DO MIL
LE02=LE02-1
RETURN
ENDIF
DO DECENA
LE16=LE05
LE02=LE02+2
DO CENTENA
LE02=LE02-2
IF RIGHT(LE16,3)="UNO"
LE16=LEFT(LE16,LEN(LE16)-1)
ENDIF
IF .NOT.EMPTY(LE05)
LE05=LE16+" MIL "+LE05
ELSE
LE05=LE16+" MIL "
ENDIF
RETURN
*******************************************
PROCEDURE CMIL
IF SUBSTR(LE01,LE02,1)="0"
LE02=LE02+1
DO DMIL
LE02=LE02-1
RETURN
ENDIF
DO CENTENA
LE17=LE05
LE02=LE02+3
DO CENTENA
LE02=LE02-3
IF RIGHT(LE17,3)="UNO"
LE17=LEFT(LE17,LEN(LE17)-1)
ENDIF
IF .NOT.EMPTY(LE05)
LE05=LE17+" MIL "+LE05
ELSE
LE05=LE17+" MIL "
ENDIF
RETURN
*******************************************
PROCEDURE MILL
IF SUBSTR(LE01,LE02,1)="0"
LE02=LE02+1
DO CMIL
LE02=LE02-1
RETURN
ENDIF
DO UNIDAD
LE18=LE05
LE02=LE02+1
DO CMIL
LE02=LE02-1
LE20=" MILLONES "
IF LE18="UNO"
LE18="UN"
LE20=" MILLON "
ENDIF
IF .NOT.EMPTY(LE05)
LE05=LE18+LE20+LE05
ELSE
LE05=LE18+LE20
ENDIF
RETURN
*******************************************
PROCEDURE DMILL
IF SUBSTR(LE01,LE02,1)="0"
LE02=LE02+1
DO MILL
LE02=LE02-1
RETURN
ENDIF
DO DECENA
LE16=LE05
LE02=LE02+2
DO CMIL
LE02=LE02-2
LE20=" MILLONES "
IF RIGHT(LE16,3)="UNO"
LE16=LEFT(LE16,LEN(LE16)-1)
ENDIF
IF .NOT.EMPTY(LE05)
LE05=LE16+LE20+LE05
ELSE
LE05=LE16+LE20
ENDIF
RETURN
*******************************************
PROCEDURE CMILL
IF SUBSTR(LE01,LE02,1)="0"
LE02=LE02+1
DO DMILL
LE02=LE02-1
RETURN
ENDIF
DO CENTENA
LE19=LE05
LE02=LE02+3
DO CMIL
LE02=LE02-3
LE20=" MILLONES "
IF RIGHT(LE19,3)="UNO"
LE19=LEFT(LE19,LEN(LE19)-1)
ENDIF
IF .NOT.EMPTY(LE05)
LE05=LE19+LE20+LE05
ELSE
LE05=LE19+LE20
ENDIF
RETURN
Comentarios sobre la versión: Versión 1 (9)