Hola Amigos
Alguien tiene alguna rutina para convertir un número a texto.
1200,25 -> MIL DOSCIENTOS EUROS CON VEINTICINCO CENTIMOS.
Un saludo
Hola Amigos
Alguien tiene alguna rutina para convertir un número a texto.
1200,25 -> MIL DOSCIENTOS EUROS CON VEINTICINCO CENTIMOS.
Un saludo
Gracias a los dos, la rutina no me devuelve los decimales, me muestra 50/ 100
Me hace falta una rutina que por ejemplo si tengo un importe de 1250.50 me devuelva MIL DOSCIENTOS CINCUENTA EUROS Y CINCUENTA CENTIMOS.
Frafive wrote:Gracias a los dos, la rutina no me devuelve los decimales, me muestra 50/ 100
Me hace falta una rutina que por ejemplo si tengo un importe de 1250.50 me devuelva MIL DOSCIENTOS CINCUENTA EUROS Y CINCUENTA CENTIMOS.
Hola amigos
Gracias a todos, pero necesito una rutina que me devuelva a Euros y con centimos.
Un saludo
Frafive wrote: Gracias a todos, pero necesito una rutina que me devuelva a Euros y con centimos.
Aqui tienes la función que yo utilizo. Vale para euros (por defecto) pero tambien para monedas "femeninas" como la peseta. El importe en letras,
sale en minúsculas o mayúsculas, con/sin céntimos.
Por ejemplo: nTotal := 1250.50
cTotal:=NumLetra (nTotal)
mil doscientos cincuenta euros con cincuenta céntimos
cTotal:=NumLetra (nTotal, '')
mil doscientos cincuenta con cincuenta céntimos
cTotal:=NumLetra (nTotal, 'BOLIVARES', .T.)
MIL DOSCIENTOS CINCUENTA BOLIVARES CON CINCUENTA CENTIMOS
// ------------------------------------------------------------------------
// Funcion ... : NumLetra
// Descripción : Convierte número a letras (español)
// Autor ......: Valdenebro 2005
// Parámetros .:
// nImporte Importe a convertir a letras
// cMoneda Moneda: Por defecto Euros.- Sin moneda ''
// lMayuscula letras y monedas en mayúsculas: defecto .f.
// lFemenino importes en femenino (uno/una): por defecto .f.
// lCentimos indicar los céntimos con letras o números: .t.
// Ejemplo ....: NumLetra (nImporte)
// ------------------------------------------------------------------------
FUNC NumLetra ( nImporte, cMoneda, lMayuscula, lFemenino, lCentimos )
local nEntero // enteros
local nCentimos, cCenLet := '' // céntimos
local nCien, cCien:='' // unidades, decenas y centenas
local nMil, cMil:='' // millares
local nMillon, cMillon:='' // millones
local cEntLet := '' // resultado final
local lNegativo := .f. // si el importe es negativo
DEFAULT cMoneda := "euros",; // moneda
lFemenino := .f. ,; // femenino
lMayuscula:= .f. ,; // mayusculas
lCentimos := .t. // céntimos en letras
IF nImporte = 0
RETURN ( "cero " + cMoneda )
ENDI
IF nImporte > 999999999.99
MsgStop( "Número demasiado largo" )
RETURN cEntLet
ENDIF
IF nImporte <= 0 // si es numero negativo lo invierte
nImporte:= (nImporte * (-1) )
lNegativo := .t.
ENDI
nEntero := INT (nImporte) // importe entero
nCentimos := ( (nImporte * 100) - (nEntero * 100 ) ) // cantidad de c‚ntimos
/// MILLONES
nMillon := INT ( nEntero / 1000000 )
IF nMillon > 0
IF nMillon = 1
cMillon = "un millón"
ELSE
cMillon := FCENTENA (nMillon) // + " millones "
cMillon += " millones "
ENDI
nEntero := ( nEntero - INT (nMillon * 1000000) )
ENDI
/// MILLARES
nMil := INT ( nEntero / 1000)
IF nMil > 0
DO CASE
CASE nMil = 1
IF nEntero < 2000
cMil = "mil "
ELSE
cMil = "un mil "
ENDI
CASE nMil = 100
cMil = "cien mil "
OTHER
cMil := FCENTENA (nMil) + " mil "
ENDC
nEntero := ( nEntero - INT (nMil * 1000) )
ENDI
/// CENTENAS
nCien := INT ( nEntero / 100)
IF nEntero > 0
IF nEntero = 100
cCien := "cien"
ELSE
cCien := FCENTENA (nEntero)
ENDI
ENDI
IF !EMPTY(cMillon) .and. EMPTY(cMil) .and. EMPTY(cCien) .and. !EMPTY(cMoneda)
cEntLet := RTRIM ( cMillon + " de " ) // enteros en letras
ELSE
cEntLet := RTRIM ( cMillon + cMil + cCien ) // enteros en letras
ENDI
*** centimos
IF nCentimos > 0 // si hay céntimos
IF lCentimos
IF lMayuscula
cCenLet := FCENTENA (nCentimos) + " CENTIMOS" // c‚ntimos en letras
ELSE
cCenLet := FCENTENA (nCentimos) + " céntimos" // c‚ntimos en letras
ENDI
ELSE
cCenLet := ALLTRIM(STR(nCentimos,2,0)) + "/100"
ENDI
ENDI
IF lFemenino // si los importes son en femeninos, p.e. pesetas o libras
cEntLet := STRTRAN(cEntLet, "un", "una", 1)
cEntLet := STRTRAN(cEntLet, "ciento","cienta")
cCenLet := STRTRAN(cCenLet,"un","una", 1)
ENDI
IF nCentimos = 0 // no lleva centimos
cEntLet := cEntLet + " " + cMoneda
ELSE
IF EMPTY(cEntLet) // solo hay céntimos
cEntLet := cCenLet
ELSE // si ponemo centimos con acento sale mal en mayusculas
cEntLet := cEntLet + " " + cMoneda + " con " + cCenLet
ENDI
ENDI
IF lNegativo
cEntLet := "menos " + cEntLet
ENDI
IF lMayuscula
cEntlet := UPPER (cEntlet)
ENDI
RETURN cEntLet
////////////////////////////////////
/// funcion auxiliar de NumLetra
////////////////////////////////////
STATIC FUNCTION FCENTENA (nImporte)
Local nUnidad, nDecena, cRet:= '', cCentena:=''
local nCentena := INT(nImporte/100) // para ver si hay unidades de centenas
local aNumero := ARRAY(900)
aNumero[1] := "un"; aNumero[2] := "dos"; aNumero[3] := "tres"
aNumero[4] := "cuatro"; aNumero[5] := "cinco"; aNumero[6] := "seis"
aNumero[7] := "siete"; aNumero[8] := "ocho" ; aNumero[9] := "nueve"
aNumero[10] := "diez" ; aNumero[11] := "once"; aNumero[12] := "doce"
aNumero[13] := "trece" ; aNumero[14] := "catorce"; aNumero[15] := "quince"
aNumero[16] := "dieciseis" ; aNumero[17] := "diecisiete"
aNumero[18] := "dieciocho" ; aNumero[19] := "diecinueve"
aNumero[20] := "veinte"; aNumero[30] := "treinta"; ;
aNumero[40] := "cuarenta"; aNumero[50] := "cincuenta"
aNumero[60] := "sesenta"
aNumero[70] := "setenta"; aNumero[80] := "ochenta"; aNumero[90] := "noventa"
aNumero[100] := "ciento"; aNumero[200] := "doscientos"
aNumero[300] := "trescientos"; aNumero[400] := "cuatrocientos"
aNumero[500] := "quinientos"; aNumero[600] := "seiscientos"
aNumero[700] := "setecientos"; aNumero[800] := "ochocientos"
aNumero[900] := "novecientos"
IF nCentena > 0
nDecena := ( nImporte - (nCentena*100) )
cCentena := aNumero [ nCentena * 100 ]
cRet := SPACE(1)
ELSE
nDecena := nImporte
ENDI
IF nDecena > 0
IF nDecena > 20
nUnidad := INT( nDecena - ( INT ( nDecena / 10 ) * 10 ) )
nDecena := nDecena - nUnidad
IF nUnidad > 0
IF nDecena < 30
DO CASE
CASE nUnidad = 1
cCentena += cRet + "veintiún"
CASE nUnidad = 3
cCentena += cRet + "veintrés"
OTHER
cCentena += cRet + "veinti" + aNumero[nUnidad]
ENDC
ELSE
cCentena += cRet + aNumero [nDecena] + " y " + aNumero [nUnidad]
ENDI
ELSE
cCentena += cRet + aNumero [nDecena]
ENDI
ELSE
cCentena += cRet + aNumero[nDecena]
ENDI
ENDI
RETURN cCentena
Gracias a todos , me funciona perfectamente
un saludo
Antonio,
Me ha gustado tu idea de poner en singular la moneda y "céntimos" cuando el importe sea UNO. No habia caido en ello, aunque a decir verdad, pocas cosas se pueden comprar por aquí con un euro.
Ya he incorporado esa idea tuya a mi función.
Buen día para todos...
Que tal Manuel Valdenebro, bueno después de 2 años sin programar he vuelto a mis andanzas
, me alegra tomes y ideas para mejorar tu función la cual es muy versátil para convertir a letras los números, fítaje que también se pueden convertir números de hasta 15 dígitos (9,999,999,999,999.99) o billones, pero bueno ya en mi país se acaba de realizar una reconversión monetaria y para llegar a billones hay que tener mucho pero mucho dinero. ![]()