********Mira esta funcion NO LA HICE YO, solo la modifique un poco para que te retorne el string con un tipo de moneda, pruebala y haber como te funciona
******SALUDOS
***********************************************************************************************************************************************
* Descripción: Programa que convierte una expresión numérica a una expresion en letras
* Variables
* Nombre Tipo Descripción
* ------------ ------ -----------------
* tipoMoneda caracter Pone el tipo de Moneda
* ultimaposiciondecimal numerica Guarda la ultima posición decimal de la expresión ingresada en el programa.
* expresionnumerica numerica Contiene la expresión numerica a evaluar en el programa
* palabras arreglo Arreglo Unidimencional de 12 posiciones donde se guarda la palabra
* de un elemento de la expresion de acuerdo a la posición que tenga el mismo
* dentro de la expresion.
* digitos arreglo Arreglo Unidimencional de 12 posiciones donde se guarda la cantidad de digitos
* tiene la expresion a evaluar en el programa.
*uso:
*numerosaletras(25000,"Dolares")
***********************************************************************************************************************************************
procedure numerosaletras
parameters expresionnumerica,tipoMoneda
set decimals to 2
dimension palabras(12)
palabras(1)=space(12)
palabras(2)=space(12)
palabras(3)=space(12)
palabras(4)=space(12)
palabras(5)=space(12)
palabras(6)=space(12)
palabras(7)=space(12)
palabras(8)=space(12)
palabras(9)=space(12)
palabras(10)=space(12)
palabras(11)=space(12)
palabras(12)=space(12)
* este arreglo se usará para llenar el arreglo palabras
dimension digitos(10)
digitos(1)=""
digitos(2)="Un "
digitos(3)="Dos "
digitos(4)="Tres "
digitos(5)="Cuatro "
digitos(6)="Cinco "
digitos(7)="Seis "
digitos(8)="Siete "
digitos(9)="Ocho "
digitos(10)="Nueve "
* salta el proceso si el valor es menor que 1
if expresionnumerica<1
expresionnumerica=str(expresionnumerica,12,2)
string='Cero '+TipoMoneda+' y '+substr(expresionnumerica,11,2)+'/100'
return string
endif
expresionnumerica=RTRIM(str(expresionnumerica,12,2)) && convertir parametro numérico a caracter
string=''
xx=1
do initstng
* este ciclo es el corazon del programa
do while .t.
if xx>=10 && no convertimos números en el derecho del punto decimal por consiguiente salida cuando hacemos allí
exit
endif
if palabras(xx)>' '
do cientos
endif
xx=xx+1
if palabras(xx)>' '
if palabras(xx)='Un ' && chequea si es uno
xx=xx+1 && en la posición de decenas
do decenas && entre el 10 y el 19
do millon
xx=xx+1
loop
else
do unidades
if palabras(xx+1)>' '
string=string+'y '
endif
endif
endif
xx=xx+1
if palabras(xx)>' '
string=string+digitos(val(substr(expresionnumerica,xx,1))+1)
endif
do millon
xx=xx+1
enddo
string=string+''+TipoMoneda+' con '+substr(expresionnumerica,11,2)+'/100'
if ("un millones" $ string) .and. (at("Un Millones",string)=1)
string="Un Millón"+substr(string,12,len(string)-12)
endif
return string
************************
* final de num2word
************************
**********************
procedure millon
**********************
* agrega la palabra millón o millones en la variable string
do case
case xx=3
if palabras(1)>' ' .or. palabras(2)>' ' .or. palabras(3)>' '
string=string+'Millones '
endif
case xx=6
if palabras(4)>' ' .or. palabras(5)>' ' .or. palabras(6)>' '
string=string+'Mil '
endif
endcase
**********************
procedure cientos
**********************
* agrega la palabra cien o ciento en la variable string
do case
case palabras(xx)==''
string=string+'Cien '
case palabras(xx)='Un '
if (palabras(xx+1)>' ' .or. palabras(xx+2)>' ')
string=string+'Ciento '
else
string=string+'Cien '
endif
case palabras(xx)='Dos '
string=string+'Doscientos '
case palabras(xx)='Tres '
string=string+'Trescientos '
case palabras(xx)='Cuatro '
string=string+'Cuatrocientos '
case palabras(xx)='Cinco '
string=string+'Quinientos '
case palabras(xx)='Seis '
string=string+'Seiscientos '
case palabras(xx)='Siete '
string=string+'Setecientos '
case palabras(xx)='Ocho '
string=string+'Ochocientos '
case palabras(xx)='Nueve '
string=string+'Novecientos '
endcase
return
**********************
procedure decenas
**********************
* agrega la palabra diez, once, doce, trece, catorce hasta diecinueve a la variable string
do case
case palabras(xx)==''
string=string+'Diez '
case palabras(xx)='Un '
string=string+'Once '
case palabras(xx)='Dos '
string=string+'Doce '
case palabras(xx)='Tres '
string=string+'Trece '
case palabras(xx)='Cuatro '
string=string+'Catorce '
case palabras(xx)='Cinco '
string=string+'Quince '
case palabras(xx)='Seis '
string=string+'Dieciseis '
case palabras(xx)='Siete '
string=string+'Diecisiete '
case palabras(xx)='Ocho '
string=string+'Dieciocho '
case palabras(xx)='Nueve '
string=string+'Diecinueve '
endcase
return
* final de decenas
**********************
procedure unidades
**********************
* agrega la palabra diez, veinte, treinta, cuarenta, cincuenta hasta noventa a la variable string
* la variable palabras(xx) = 'uno ' entonce sera 'diez'
* si palabras(xx) = 'dos ' entonce sera 'veinte'
* si palabras(xx) = 'tres ' entonces sera 'treinta'
do case
case palabras(xx)==''
return
case palabras(xx)='Un '
string=string+'Diez '
case palabras(xx)='Dos '
string=string+'Veinte '
case palabras(xx)='Tres '
string=string+'Treinta '
case palabras(xx)='Cuatro '
string=string+'Cuarenta '
case palabras(xx)='Cinco '
string=string+'Cincuenta '
case palabras(xx)='Seis '
string=string+'Sesenta '
case palabras(xx)='Siete '
string=string+'Setenta '
case palabras(xx)='Ocho '
string=string+'Ochenta '
case palabras(xx)='Nueve '
string=string+'Noventa '
endcase
return
* final del procedure unidades
**********************
procedure initstng
**********************
*******************************************************************
* este loop crea el arreglo palabras in el cual
* los elementos son una representacion alpha
* de la cifra incluida el la variable expresionnumerica
* ejemplo: (pasando el valor = 12345.95)
*******************************************************************
* palabras(1) = " "
* palabras(2) = " "
* palabras(3) = " "
* palabras(4) = " "
* palabras(5) = "one "
* palabras(6) = "two "
* palabras(7) = "three "
* palabras(8) = "four "
* palabras(9) = "five "
* palabras(10) = "and"
* palabras(11) = "nine "
* palabras(12) = "five "
do while .t.
if xx>12
exit
endif
do case
case substr(expresionnumerica,xx,1)='.'
palabras(xx)='y'
case substr(expresionnumerica,xx,1)=' '
palabras(xx)=' '
otherwise
ultimaposiciondecimal=val(substr(expresionnumerica,xx,1))
palabras(xx)=digitos(ultimaposiciondecimal+1)
endcase
xx=xx+1
enddo
xx=1
return