Funcion de Numeros a Letras en ingles

Funcion de Numeros a Letras: Necesito una funcion en VFP que me traduzca un valor numerico a letras, pero en idioma Inlges, en español ya la tengo.
Gracias.

1 Respuesta

Respuesta
1
Estube tratando de enviarte la función y no pude, escribeme a la siguiente dirección de [email protected] y te la envio
Ahora si lo acepto
Function montoingles()
Parameters pnNumber, pcCurrency, pnSubD, plOmitCurr, plOmitFrac, pnStars, plSubAsIs
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*
*!* Program: montoingles
*!* Description: Transforma numeros en decimales (se puede incluir el simbolo de la moneda "$")
*!* (Ej: "255.73" lo transforma a "Two Hundred Fifty-Five and 73/100 Dollars")
*!* Parametros: 1) Número a Transformar como caracter
*!* 2) String que representa la moneda (por defecto es "Dollars")
*!* 3) Divisor de la moneda (por defecto es 100)
*!* [ej: 100 cents por dollar, 1000 puntos por logro]
*!* 4) Logico; El nombre de la moneda es omitido cuando es .t. (por defecto es .t.)
*!* 5) Logico; quita la fracción cuando es .t. (por defecto es .F.)
*!* (Ej: "255.73" lo transforma a "Two Hundred Fifty-Five Dollars")
*!* 6) numero , largo de la cadena de caracteres ( por defecto es 0)
*!* 7) Logico; si es true redondea al inmediato superior (por defecto es .F.)
*!* Sintax/Ejemplos:? montoingles(1034.23) devuelve "One Thousand Thirty-Four and 23/100 Dollars"
*!* ? Montoingles(1004.23,"Pounds") devuelve "One Thousand Four and 23/100 Pounds"
*!* ? Montoingles(1230.23,,,.T.) devuelve "One Thousand Two Hundred Thirty and 23/100"
*!* ? Montoingles(1234.23,,,.T.,.T.) devuelve "One Thousand Two Hundred Thirty-Four"
*!* ? Montoingles(1032.23,"Pesos",,,.T.) devuelve "One Thousand Thirty-Two Pesos"
*!* ? montoingles(2.0,"Francs",,,.T.,20) devuelve "Two Francs *********"
*!* ? montoingles(25.24,,,,,40) devuelve "Twenty-Five and 24/100 Dollars *********"
*!* ? Montoingles(804.003,"Money-os", 2000) devuelve "Eight Hundred Four and 0006/2000 Money-os"
*!* ? montoingles(5.1455,"Money-os",1000,,,,.T.) devuelve "Six and 455/1000 Money-os"
*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*
If PARAMETERS()<7 OR EMPTY(plSubAsIs)
plSubAsIs = .F.
Endif
If PARAMETERS()<6 OR EMPTY(pnStars)
pnStars = 0
Endif
If PARAMETERS()<5 OR EMPTY(plOmitFrac)
plOmitFrac = .F.
Endif
If PARAMETERS()<4 OR EMPTY(plOmitCurr)
* If EMPTY(pcCurrency)
* plOmitCurr = .T.
* Else
* plOmitCurr = .F.
* Endif
Endif
If PARAMETERS()<3 OR EMPTY(pnSubD)
pnSubD = 100
Endif
If PARAMETERS()<2 OR EMPTY(pcCurrency)
pcCurrency = "Dollars"
Endif
If PARAMETERS()<1 OR EMPTY(pnNumber)
pnNumber = 0.0
Endif
Private nSubs, nCurrs, cTextAmount, nLength, nStar, cNumber, nDecPlaces, nGetDecPlaces
*DEPURADOR('JGS',.T.)
If plSubAsIs
nDecPlaces = 0
nGetDecPlaces = pnNumber
Do WHILE nGetDecPlaces % 1 <> 0
nGetDecPlaces = nGetDecPlaces * 10
nDecPlaces = nDecPlaces + 1
Enddo
cNumber = ALLTRIM(STR(pnNumber,25,nDecPlaces))
If '.' $ cNumber
nSubs = INT(VAL(SUBSTR(cNumber,RAT('.',cNumber)+1,LEN(cNumber)-RAT('.',cNumber))))
Else
nSubs = 0
Endif
Else
nSubs = ROUND(((pnNumber - FLOOR(pnNumber)) * pnSubD),0)
Endif
If nSubs >= pnSubD
nCurrs = pnNumber
Do WHILE nSubs >= pnSubD
nCurrs = nCurrs + 1
nSubs = nSubs - pnSubD
Enddo
Else
nCurrs = pnNumber
Endif
cTextAmount = No2WordE(nCurrs)
If !plOmitFrac
cTextAmount = cTextAmount + " and " + SubsForCurr(nSubs,pnSubD)
Endif
If !plOmitCurr
cTextAmount = cTextAmount + " " + PROPER(pcCurrency)
Endif
If pnStars > 0
nLength = LEN(cTextAmount)
If pnStars > nLength + 1
cTextAmount = cTextAmount + " "
nLength = nLength + 1
For nStar = pnStars TO nLength+1 STEP -1
cTextAmount = cTextAmount + "*"
Endfor
Endif
Endif
Return cTextAmount
Function SubsForCurr
Lparameters nSubs, nSubD
Private cSubs, nShrink, nSubTemp, nCutOff, nGrow
cSubs = ""
nSubTemp = nSubD
nShrink = 0
Do WHILE nSubTemp > 1
nSubTemp = nSubTemp / 10
nShrink = nShrink + 1
Enddo
nCutOff = 1
For nGrow = 1 TO nShrink-1
nCutOff = nCutOff * 10
If nSubs < nCutOff
cSubs = cSubs + "0"
Endif
Endfor
cSubs = cSubs + ALLTRIM(STR(nSubs)) + "/" + ALLTRIM(STR(nSubD))
Return cSubs
Endfunc
Function No2WordE
Parameters pnNumber
Private lcNumber, lnLen, lcReturn, lnI, lcHundred, lcTens, lcSign
If pnNumber < 0
lcSign="Minus "
pnNumber=-pnNumber
Else
lcSign=""
Endif
If INT( pnNumber) = 0
Return "Zero"
Endif
lcNumber=LTRIM( STR( INT( pnNumber), 18))
lnLen=LEN( lcNumber)
lnLen=INT( lnLen/3+1)*3
lcNumber=PADL( lcNumber, lnLen, "0")
lcReturn=""
For lnI=1 TO lnLen/3
lcHundred=Digit( SUBSTR( lcNumber, lnLen-lnI*3+1, 1))
If NOT EMPTY( lcHundred)
lcHundred=lcHundred+" Hundred"
Endif
lcTens=Tens( SUBSTR( lcNumber, lnLen-lnI*3+2, 2))
If NOT EMPTY( lcTens)
If NOT EMPTY( lcHundred)
lcHundred=lcHundred+" "+lcTens
Else
lcHundred=lcTens
Endif
Endif
If NOT EMPTY( lcHundred)
Do CASE
Case lnI = 2
lcReturn=lcHundred+" Thousand"+;
IIF( EMPTY( lcReturn), "", " ")+lcReturn
Case lnI = 3
lcReturn=lcHundred+" Million"+;
IIF( EMPTY( lcReturn), "", " ")+lcReturn
Case lnI = 4
lcReturn=lcHundred+" Billion"+;
IIF( EMPTY( lcReturn), "", " ")+lcReturn
Case lnI = 5
lcReturn=lcHundred+" Trillion"+;
IIF( EMPTY( lcReturn), "", " ")+lcReturn
Otherwise
lcReturn=lcHundred
Endcase
Endif
Endfor
Return lcSign+lcReturn
Endfunc
Function Tens
Parameters pcNumber
Private lcTens, lcUnits, lcReturn
lcTens=LEFT( pcNumber, 1)
lcUnits=RIGHT( pcNumber, 1)
Do CASE
Case lcTens = "0"
lcReturn=Digit( lcUnits)
Case lcTens = "1"
Do CASE
Case lcUnits = "0"
lcReturn="Ten"
Case lcUnits = "1"
lcReturn="Eleven"
Case lcUnits = "2"
lcReturn="Twelve"
Case lcUnits = "3"
lcReturn="Thirteen"
Case lcUnits = "4"
lcReturn="Fourteen"
Case lcUnits = "5"
lcReturn="Fifteen"
Case lcUnits = "6"
lcReturn="Sixteen"
Case lcUnits = "7"
lcReturn="Seventeen"
Case lcUnits = "8"
lcReturn="Eighteen"
Case lcUnits = "9"
lcReturn="Nineteen"
Endcase
Otherwise
Do CASE
Case lcTens = "2"
lcReturn="Twenty"
Case lcTens = "3"
lcReturn="Thirty"
Case lcTens = "4"
lcReturn="Forty"
Case lcTens = "5"
lcReturn="Fifty"
Case lcTens = "6"
lcReturn="Sixty"
Case lcTens = "7"
lcReturn="Seventy"
Case lcTens = "8"
lcReturn="Eighty"
Case lcTens = "9"
lcReturn="Ninety"
Endcase
lcUnits=Digit( lcUnits)
If NOT EMPTY( lcUnits)
lcReturn=lcReturn+"-"+lcUnits
Endif
Endcase
Return lcReturn && Tens
Endfunc
*======================================================================
Function Digit
Parameters pcDigit
Private lcReturn
Do CASE
Case pcDigit = "0"
lcReturn=""
Case pcDigit = "1"
lcReturn="One"
Case pcDigit = "2"
lcReturn="Two"
Case pcDigit = "3"
lcReturn="Three"
Case pcDigit = "4"
lcReturn="Four"
Case pcDigit = "5"
lcReturn="Five"
Case pcDigit = "6"
lcReturn="Six"
Case pcDigit = "7"
lcReturn="Seven"
Case pcDigit = "8"
lcReturn="Eight"
Case pcDigit = "9"
lcReturn="Nine"
Endcase
Return lcReturn
Endfunc

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas