De números a letras + decimales

Estoy realizando un sistema que imprima un cheque determinado lo que necesito es que cuando ingrese por ejemplo un monto 1,200.25 me muestre en otro static text pero en letras UN MIL DOSCIENTOS CON 25/100 pero AUTOMÁTICAMENTE gracias hasta ahora he probado otros códigos necesito uno que funcione para mi proyecto...

2 respuestas

Respuesta
2
Crea un función que haga eso. Acá te dejo el código que uso.
$PBExportHeader$f_nun_letras.srf
global type f_nun_letras from function_object
end type
forward prototypes
global function string f_nun_letras (decimal nnumero, character cgenero)
end prototypes
global function string f_nun_letras (decimal nnumero, character cgenero);///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Autor: Carlos vera             Fecha: (02/01/2011)
//
// E-mail:
//
// Versión: 10.5
//
// Función: f_num_letras
//
// Descripción: Pasa un valor numérico a su valor en texto
//
// Ambito: Public
//
// Argumentos: nnumero {Decimal a pasae a valor en cadena de texto}
// Cgenero {Chararter genero a devolver 'F' femenino 'una' en caso contrario 'uno'}
//
// Retorna: string  {string - cadena de texto del numero pasado}
//
//
// Notas:
//
// Ejemplo: A ser posible un ejemplo de la llamada a la función
//                                                   string aa
//                                                   aa=f_nun_letras(long(sle_1.text),"F")
//                                                   st_3.text=aa
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Declaración de Constantes
String  Y    = "y "
String  F    = "as "
String  M    = "os "
String  MIL   = "mil "
String  MILLON  = "millón "
String  MILLONES = "millones "
String  BILLON  = "billón "
String  BILLONES = "billones "
// Declaración de Variables
String aGrupos[5], aUnidad[10], aDecena[10,10], aCentena[10], aConector[5], cEnLetra, cNumStr, cUnidad, cDecena, cCentena
Long  nGrupo, nEntero, nDecimal
// Control de Parámetros opcionales
If IsNull(cGenero) Then
cGenero = "F"
Else
cGenero = Upper( cGenero )
End If
// Separando los Valores Enteros de los Decimales
nEntero = Truncate( nNumero,0 )
nDecimal = Integer ( ( nNumero - nEntero ) * 100 )
// Conversión el Número a Cadena, justificando con 0 a la Izquierda
cNumStr = Trim( String( nEntero ) )
cNumStr = Fill( "0", 15 - Len( cNumStr ) ) + cNumStr
// Confección de los Grupos
For nGrupo = 1 To 5
aGrupos[5 - nGrupo + 1] = Mid( cNumStr, ( nGrupo - 1 ) * 3 + 1, 3 )
Next
// Proceso
cEnLetra = ""
For nGrupo = 5 To 1 Step -1
// Extraer cada una de las 3 cifras del Grupo en curso
cUnidad = Right ( aGrupos[nGrupo], 1 )
cDecena  = Mid   ( aGrupos[nGrupo], 2, 1 )
cCentena = Left  ( aGrupos[nGrupo], 1    )
// Inferencias para las UNIDADES
If nEntero = 0 And nGrupo = 1 Then aUnidad[1] = "cero" Else aUnidad[1] = ""
If cDecena = "1" Then
aUnidad[2] = aDecena[2, Long( cUnidad ) + 1]
Else
If aGrupos[nGrupo] = "001" And ( nGrupo = 2 Or nGrupo = 4 ) Then
aUnidad[2] = ""
Else
If nGrupo > 2 Then
aUnidad[2] = "un "
Else
If cGenero = "F" Then
aUnidad[2] = "una "
Else
aUnidad[2] = "uno "
End If
End If
End If
End If
If cDecena = "1" Then aUnidad[ 3] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 3] = "dos "
If cDecena = "1" Then aUnidad[ 4] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 4] = "tres "
If cDecena = "1" Then aUnidad[ 5] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 5] = "cuatro "
If cDecena = "1" Then aUnidad[ 6] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 6] = "cinco "
If cDecena = "1" Then aUnidad[ 7] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 7] = "seis "
If cDecena = "1" Then aUnidad[ 8] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 8] = "siete "
If cDecena = "1" Then aUnidad[ 9] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 9] = "ocho "
If cDecena = "1" Then aUnidad[10] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[10] = "nueve "
// Inferencias para las DECENAS
aDecena[ 1, 1] = ""
If cUnidad = "0" Then aDecena[2,1] = "diez " Else aDecena[2,1] = ""
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 "
If cUnidad  = "0" Then aDecena[ 3,1] = "veinte "    Else aDecena[ 3,1] = "veinti"
If cUnidad <> "0" Then aDecena[ 4,1] = "treinta "   + Y Else aDecena[ 4,1] = "treinta "
If cUnidad <> "0" Then aDecena[ 5,1] = "cuarenta "  + Y Else aDecena[ 5,1] = "cuarenta "
If cUnidad <> "0" Then aDecena[ 6,1] = "cincuenta " + Y Else aDecena[ 6,1] = "cincuenta "
If cUnidad <> "0" Then aDecena[ 7,1] = "sesenta "   + Y Else aDecena[ 7,1] = "sesenta "
If cUnidad <> "0" Then aDecena[ 8,1] = "setenta "   + Y Else aDecena[ 8,1] = "setenta "
If cUnidad <> "0" Then aDecena[ 9,1] = "ochenta "   + Y Else aDecena[ 9,1] = "ochenta "
If cUnidad <> "0" Then aDecena[10,1] = "noventa "   + Y Else aDecena[10,1] = "noventa "
// Inferencias para las CENTENAS
aCentena[ 1] = ""
If cDecena + cUnidad = "00" Then aCentena[ 2] = "cien " Else aCentena[ 2] = "ciento "
If nGrupo < 3 And cGenero = "F" Then aCentena[ 3] = "doscient"    + F Else aCentena[ 3] = "doscient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 4] = "trescient"   + F Else aCentena[ 4] = "trescient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 5] = "cuatrocient" + F Else aCentena[ 5] = "cuatrocient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 6] = "quinient"    + F Else aCentena[ 6] = "quinient"  + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 7] = "seiscient"   + F Else aCentena[ 7] = "seiscient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 8] = "setecient"   + F Else aCentena[ 8] = "setecient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 9] = "ochocient"   + F Else aCentena[ 9] = "ochocient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[10] = "novecient"   + F Else aCentena[10] = "novecient" + M
// Inferencias para los Conectores
aConector[1] = ""
If aGrupos[2] > "000" Then aConector[2] = MIL Else aConector[2] = ""
If aGrupos[3] > "000" Or aGrupos[4] > "000" Then
If aGrupos[3] = "001" Then
aConector[3] = MILLON
Else
aConector[3] = MILLONES
End If
Else
aConector[3] = ""
End If
If aGrupos[4] > "000" Then aConector[4] = MIL Else aConector[4] = ""
If aGrupos[5] > "000" Then
If aGrupos[5] = "001" Then
aConector[5] = BILLON
Else
aConector[5] = BILLONES
End If
Else
aConector[5] = ""
End If
// Componer la cifra en letra del Grupo en curso
cEnletra = cEnLetra + aCentena [ Long ( cCentena ) + 1 ] + &
aDecena [ Long ( cDecena  ) + 1 , 1 ] + &
aUnidad  [ Long ( cUnidad  ) + 1 ] + &
aConector[ nGrupo ]
Next
cEnLetra = cEnLetra + " y " + String ( Abs(nDecimal), "00" )+"/100"
// Salida
RETURN cEnLetra
end function
Hola no entiendo muy bien lo que tengo que hacer no soy muy bueno en esto haber si mejor me pasas la función para poder importarlo te lo agradecería... a este correo [email protected], Gracias..
Si te la paso tendrás menos practica así que mejor te explico un poco más de detalle:
Create una funcion Global llamada f_num_a_letras
Argumentos de entrada
* Decimal                                 >                 nnumero

*character                                >                 cgenero
Tipo de retorno
String
Código (pegale todo esto)
//
// Autor: Carlos vera             Fecha: (02/01/2011)
//
// E-mail:
//
// Versión: 10.5
//
// Función: f_num_letras
//
// Descripción: Pasa un valor numérico a su valor en texto
//
// Ambito: Public
//
// Argumentos: nnumero {Decimal a pasae a valor en cadena de texto}
// Cgenero {Chararter genero a devolver 'F' femenino 'una' en caso contrario 'uno'}
//
// Retorna: string  {string - cadena de texto del numero pasado}
//
//
// Notas:
//
// Ejemplo: A ser posible un ejemplo de la llamada a la función
//                                                   string aa
//                                                   aa=f_nun_letras(long(sle_1.text),"F")
//                                                   st_3.text=aa
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Declaración de Constantes
String  ls_Y    = "Y "
String  F    = "as "
String  M    = "os "
String  MIL   = "mil "
String  MILLON  = "millón "
String  MILLONES = "millones "
String  BILLON  = "billón "
String  BILLONES = "billones "
// Declaración de Variables
String aGrupos[5], aUnidad[10], aDecena[10,10], aCentena[10], aConector[5], cEnLetra, cNumStr, cUnidad, cDecena, cCentena
Long  nGrupo, nEntero, nDecimal
// Control de Parámetros opcionales
If IsNull(cGenero) Then
cGenero = "F"
Else
cGenero = Upper( cGenero )
End If
// Separando los Valores Enteros de los Decimales
nEntero = Truncate( nNumero,0 )
nDecimal = Integer ( ( nNumero - nEntero ) * 100 )
// Conversión el Número a Cadena, justificando con 0 a la Izquierda
cNumStr = Trim( String( nEntero ) )
cNumStr = Fill( "0", 15 - Len( cNumStr ) ) + cNumStr
// Confección de los Grupos
For nGrupo = 1 To 5
aGrupos[5 - nGrupo + 1] = Mid( cNumStr, ( nGrupo - 1 ) * 3 + 1, 3 )
Next
// Proceso
cEnLetra = ""
For nGrupo = 5 To 1 Step -1
// Extraer cada una de las 3 cifras del Grupo en curso
cUnidad = Right ( aGrupos[nGrupo], 1 )
cDecena  = Mid   ( aGrupos[nGrupo], 2, 1 )
cCentena = Left  ( aGrupos[nGrupo], 1    )
// Inferencias para las UNIDADES
If nEntero = 0 And nGrupo = 1 Then aUnidad[1] = "cero" Else aUnidad[1] = ""
If cDecena = "1" Then
aUnidad[2] = aDecena[2, Long( cUnidad ) + 1]
Else
If aGrupos[nGrupo] = "001" And ( nGrupo = 2 Or nGrupo = 4 ) Then
aUnidad[2] = ""
Else
If nGrupo > 2 Then
aUnidad[2] = "un "
Else
If cGenero = "F" Then
aUnidad[2] = "una "
Else
aUnidad[2] = "uno "
End If
End If
End If
End If
If cDecena = "1" Then aUnidad[ 3] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 3] = "dos "
If cDecena = "1" Then aUnidad[ 4] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 4] = "tres "
If cDecena = "1" Then aUnidad[ 5] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 5] = "cuatro "
If cDecena = "1" Then aUnidad[ 6] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 6] = "cinco "
If cDecena = "1" Then aUnidad[ 7] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 7] = "seis "
If cDecena = "1" Then aUnidad[ 8] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 8] = "siete "
If cDecena = "1" Then aUnidad[ 9] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[ 9] = "ocho "
If cDecena = "1" Then aUnidad[10] = aDecena[2, Long( cUnidad ) + 1] Else aUnidad[10] = "nueve "
// Inferencias para las DECENAS
aDecena[ 1, 1] = ""
If cUnidad = "0" Then aDecena[2,1] = "diez " Else aDecena[2,1] = ""
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 "
If cUnidad  = "0" Then aDecena[ 3,1] = "veinte "    Else aDecena[ 3,1] = "veinti"
If cUnidad <> "0" Then aDecena[ 4,1] = "treinta "   + ls_Y Else aDecena[ 4,1] = "treinta "
If cUnidad <> "0" Then aDecena[ 5,1] = "cuarenta "  + ls_Y Else aDecena[ 5,1] = "cuarenta "
If cUnidad <> "0" Then aDecena[ 6,1] = "cincuenta " + ls_Y Else aDecena[ 6,1] = "cincuenta "
If cUnidad <> "0" Then aDecena[ 7,1] = "sesenta "   + ls_Y Else aDecena[ 7,1] = "sesenta "
If cUnidad <> "0" Then aDecena[ 8,1] = "setenta "   + ls_Y Else aDecena[ 8,1] = "setenta "
If cUnidad <> "0" Then aDecena[ 9,1] = "ochenta "   + ls_Y Else aDecena[ 9,1] = "ochenta "
If cUnidad <> "0" Then aDecena[10,1] = "noventa "   + ls_Y Else aDecena[10,1] = "noventa "
// Inferencias para las CENTENAS
aCentena[ 1] = ""
If cDecena + cUnidad = "00" Then aCentena[ 2] = "cien " Else aCentena[ 2] = "ciento "
If nGrupo < 3 And cGenero = "F" Then aCentena[ 3] = "doscient"    + F Else aCentena[ 3] = "doscient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 4] = "trescient"   + F Else aCentena[ 4] = "trescient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 5] = "cuatrocient" + F Else aCentena[ 5] = "cuatrocient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 6] = "quinient"    + F Else aCentena[ 6] = "quinient"  + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 7] = "seiscient"   + F Else aCentena[ 7] = "seiscient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 8] = "setecient"   + F Else aCentena[ 8] = "setecient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[ 9] = "ochocient"   + F Else aCentena[ 9] = "ochocient" + M
If nGrupo < 3 And cGenero = "F" Then aCentena[10] = "novecient"   + F Else aCentena[10] = "novecient" + M
// Inferencias para los Conectores
aConector[1] = ""
If aGrupos[2] > "000" Then aConector[2] = MIL Else aConector[2] = ""
If aGrupos[3] > "000" Or aGrupos[4] > "000" Then
If aGrupos[3] = "001" Then
aConector[3] = MILLON
Else
aConector[3] = MILLONES
End If
Else
aConector[3] = ""
End If
If aGrupos[4] > "000" Then aConector[4] = MIL Else aConector[4] = ""
If aGrupos[5] > "000" Then
If aGrupos[5] = "001" Then
aConector[5] = BILLON
Else
aConector[5] = BILLONES
End If
Else
aConector[5] = ""
End If
// Componer la cifra en letra del Grupo en curso
cEnletra = cEnLetra + aCentena [ Long ( cCentena ) + 1 ] + &
aDecena [ Long ( cDecena  ) + 1 , 1 ] + &
aUnidad  [ Long ( cUnidad  ) + 1 ] + &
aConector[ nGrupo ]
Next
cEnLetra = cEnLetra + " Y " + String ( Abs(nDecimal), "00" )+"/100"
// Salida
RETURN cEnLetra
//***************************************************
//***************************************************
Para usarla lo siguiente:
sle_letras.text = f_num_a_letras(102140.5,'F')
Listo eso es todo.
Hola he creado la función algunos valores me arroja en femenino como por ejemplo: 21,000.00 (veintiuna mil Y 00/100), hay más aun valores que arrojan en femenino a que se debe,,,, ademas no sale con dos decimales así más o menos yo pongo 21,000.25 y me arroja veintiuna mil Y 00/100 , debería de ser veintiuna mil Y 25/100... gracias por tu ayuda...
Tan raro revisa tu numero, a lo mejor por algún lado le estas redondeando o esta perdiendo los decimales prueba de esta manera, el único cambio que si abría que hacerle es la F por M y seria todo lo de los decimales si lo hace
sle_letras.text = f_num_a_letras(21000.25,'M')
Hola cambie la F por la M me da el resultado deseado, pero cuando coloco los dos decimales no me muestra por ejemplo 2,500.36 solo me arooja (dos mil quinientos Y 00/100) yo lo estoy trabajando así con este código en un botón convertir: string aa
aa=f_num_a_letras(long(em_1.text),"M")
sle_1.text=aa
Gracias por la ayuda...
Lo dicho el problema no es la funcion si no tu codig, por eso te dije que colocaras esto 
sle_letras.text = f_num_a_letras(21000.25,'M')
tu estas haciendo esto(fijate lo que marco con negrita):
sle_letras.text = f_num_a_letras(LONG(21000.25),'M')
Tu estas convirtiendo el decimal a LONG el cual es un tipo de dato ENTERO LARGO es decir los decimales que tenga siempre lo redondeara en lugar del LOG colócale DECIMAL que es eltipo de dato que recibe la función.
Con esto ya estaría, no olvides cerrar la pregunta
hola cambie como me digiste de esta manera de long a decimal :                                string aa
aa=f_num_a_letras(decimal(em_1.text),"M")
sle_1.text=aa       .Y ahora me arroja un error C0051: Unknown name decimal, graciass x tu ayuda..
Cuando conviertas a decimal, TEN ENCUENTA LO SIGUIENTE
Decimal es el UNICO tipo de dato que para usarlo en la conversion de debes escribirlo completo solo DEC
string aa
aa=f_num_a_letras(dec(em_1.text),"M")
sle_1.text=aa
Respuesta
1
Crea una Funcion en "RETURN TYPE" elegi "STRING"
Y en "Agument Type" pone "Double" y "Argument Name" escribi "nimp"
luego pega el siguiente codigo:
long        nUni, nDec, nCen, nA, nMil
int         li_dec
string     lsHasta29[], lsCentenas[], lsDecenas[]
lsHasta29[1]  = ''
lsHasta29[2]  = ' uno'
lsHasta29[3]  = ' dos'
lsHasta29[4]  = ' tres'
lsHasta29[5]  = ' cuatro'
lsHasta29[6]  = ' cinco'
lsHasta29[7]  = ' seis'
lsHasta29[8]  = ' siete'
lsHasta29[9]  = ' ocho'
lsHasta29[10] = ' nueve'
lsHasta29[11] = ' diez'
lsHasta29[12] = ' once'
lsHasta29[13] = ' doce'
lsHasta29[14] = ' trece'
lsHasta29[15] = ' catorce'
lsHasta29[16] = ' quince'
lsHasta29[17] = ' dieciseis'
lsHasta29[18] = ' diecisiete'
lsHasta29[19] = ' dieciocho'
lsHasta29[20] = ' diecinueve'
lsHasta29[21] = ' veinte'
lsHasta29[22] = ' veintiuno'
lsHasta29[23] = ' veintidos'
lsHasta29[24] = ' veintitres'
lsHasta29[25] = ' veinticuatro'
lsHasta29[26] = ' veinticinco'
lsHasta29[27] = ' veintiseis'
lsHasta29[28] = ' veintisiete'
lsHasta29[29] = ' veintiocho'
lsHasta29[30] = ' veintinueve'
lsDecenas[3] = ' treinta'
lsDecenas[4] = ' cuarenta'
lsDecenas[5] = ' cincuenta'
lsDecenas[6] = ' sesenta'
lsDecenas[7] = ' setenta'
lsDecenas[8] = ' ochenta'
lsDecenas[9] = ' noventa'
lsCentenas[1]  = ''
lsCentenas[2]  = ' ciento'
lsCentenas[3]  = ' doscientos'
lsCentenas[4]  = ' trescientos'
lsCentenas[5]  = ' cuatrocientos'
lsCentenas[6]  = ' quinientos'
lsCentenas[7]  = ' seiscientos'
lsCentenas[8]  = ' setecientos'
lsCentenas[9]  = ' ochocientos'
lsCentenas[10] = ' novecientos'
String  sA, sImp
sImp = Left( String( nImp, '000000000000.00' ), 12 )
For nA = 1 to 4
   nMil = Long( Mid( sImp, nA * 3 - 2, 3 ) )
   nCen = Int( nMil / 100 )
   nDec = Int( ( nMil - nCen * 100 ) / 10 )
   nUni = nMil - nCen * 100 - nDec * 10
   If nMil = 100 Then
      sA = sA + ' cien'
   ElseIf nDec < 3 Then
      If nUni = 1 and ( nA = 1 or nA = 3 ) Then
            choose case nDec
            case 0
                 sA = sA + lsCentenas[nCen + 1] + ' un'                
            case 1
                 sA = sA + lsCentenas[nCen + 1] + ' once'                                
            case 2
                 sA = sA + lsCentenas[nCen + 1] + ' veintiún'                                
        end choose
      Else
         sA = sA + lsCentenas[nCen + 1] + lsHasta29[nDec*10+nUni + 1]
      End If
   Else
      sA = sA + lsCentenas[nCen + 1] + lsDecenas[nDec]
      If nUni <> 0 Then
         If nUni = 1 and ( nA = 1 or nA = 3 ) Then
            sA = sA + ' y un'
         Else
            sA = sA + ' y' + lsHasta29[nUni + 1]
         End If
      End If
   End If
   If ( nA = 1 or nA = 3 ) and nMil <> 0 Then
      sA = sA + ' mil'
   End If
   If nA = 2 and sA <> '' Then
      If sA = ' uno' Then
         sA = ' un millon'
      Else
         sA = sA + ' millones'
      End If
   End If
   If nA = 4 and sA = '' Then
      sA = ' cero'
   End If
Next
li_dec = abs((round(nImp,2) - truncate(nImp,0)) *100)
if li_dec > 0 and li_dec < 100 then
   sA = sA + ' con ' + String(li_dec) + "/100"
end if
Return  sA
----------------------------------------------------------------------------------------------------
Y para llamar a la función seria por ejemplo si le pusiste de nombre "f_letras"
ls_numero = f_letras(1200.25)
Ya lo probé y funciona 100% como vos quieres.
Espero tu respuesta y calificación... recuerda que calificar es decir "Gracias" al esfuerzo.
He creado la función y la he probado pero hay dos cosas que no salen... por ejemplo cuando pongo un valor redondeado no me muestra 00/100 , mejor dicho pongo 1,500.00 (un mil quinientos) nada más sin 00/100, la otro que tampoco sale es cuando pongo 21,000,000.00 sale ( veintiuno millones) debería de salir ( veintiún millones con 00/100) gracias por la ayuda me esta sirviendo...
Los dos problemas solucionados... copia y pega reemplazando lo anterior:
long        nUni, nDec, nCen, nA, nMil
int         li_dec
string     lsHasta29[], lsCentenas[], lsDecenas[]
lsHasta29[1]  = ''
lsHasta29[2]  = ' uno'
lsHasta29[3]  = ' dos'
lsHasta29[4]  = ' tres'
lsHasta29[5]  = ' cuatro'
lsHasta29[6]  = ' cinco'
lsHasta29[7]  = ' seis'
lsHasta29[8]  = ' siete'
lsHasta29[9]  = ' ocho'
lsHasta29[10] = ' nueve'
lsHasta29[11] = ' diez'
lsHasta29[12] = ' once'
lsHasta29[13] = ' doce'
lsHasta29[14] = ' trece'
lsHasta29[15] = ' catorce'
lsHasta29[16] = ' quince'
lsHasta29[17] = ' dieciseis'
lsHasta29[18] = ' diecisiete'
lsHasta29[19] = ' dieciocho'
lsHasta29[20] = ' diecinueve'
lsHasta29[21] = ' veinte'
lsHasta29[22] = ' veintiuno'
lsHasta29[23] = ' veintidos'
lsHasta29[24] = ' veintitres'
lsHasta29[25] = ' veinticuatro'
lsHasta29[26] = ' veinticinco'
lsHasta29[27] = ' veintiseis'
lsHasta29[28] = ' veintisiete'
lsHasta29[29] = ' veintiocho'
lsHasta29[30] = ' veintinueve'
lsDecenas[3] = ' treinta'
lsDecenas[4] = ' cuarenta'
lsDecenas[5] = ' cincuenta'
lsDecenas[6] = ' sesenta'
lsDecenas[7] = ' setenta'
lsDecenas[8] = ' ochenta'
lsDecenas[9] = ' noventa'
lsCentenas[1]  = ''
lsCentenas[2]  = ' ciento'
lsCentenas[3]  = ' doscientos'
lsCentenas[4]  = ' trescientos'
lsCentenas[5]  = ' cuatrocientos'
lsCentenas[6]  = ' quinientos'
lsCentenas[7]  = ' seiscientos'
lsCentenas[8]  = ' setecientos'
lsCentenas[9]  = ' ochocientos'
lsCentenas[10] = ' novecientos'
String  sA, sImp
sImp = Left( String( nImp, '000000000000.00' ), 12 )
For nA = 1 to 4
   nMil = Long( Mid( sImp, nA * 3 - 2, 3 ) )
   nCen = Int( nMil / 100 )
   nDec = Int( ( nMil - nCen * 100 ) / 10 )
   nUni = nMil - nCen * 100 - nDec * 10
   If nMil = 100 Then
      sA = sA + ' cien'
   ElseIf nDec < 3 Then
      If nUni = 1 and ( nA = 1 or nA = 3 ) Then
            choose case nDec
            case 0
                 sA = sA + lsCentenas[nCen + 1] + ' un'                
            case 1
                 sA = sA + lsCentenas[nCen + 1] + ' once'                                
            case 2
                 sA = sA + lsCentenas[nCen + 1] + ' veintiún'                                
        end choose
      Else
         sA = sA + lsCentenas[nCen + 1] + lsHasta29[nDec*10+nUni + 1]
      End If
   Else
      sA = sA + lsCentenas[nCen + 1] + lsDecenas[nDec]
      If nUni <> 0 Then
         If nUni = 1 and ( nA = 1 or nA = 3 ) Then
            sA = sA + ' y un'
         Else
            sA = sA + ' y' + lsHasta29[nUni + 1]
         End If
      End If
   End If
   If ( nA = 1 or nA = 3 ) and nMil <> 0 Then
      sA = sA + ' mil'
   End If
   If nA = 2 and sA <> '' Then
      If sA = ' uno' Then
         sA = ' un millon'
    ElseIf sA =  ' veintiuno' THEN
        sA = " veintiún" + ' millones'
     Else
         sA = sA + ' millones'
      End If
   End If
   If nA = 4 and sA = '' Then
      sA = ' cero'
   End If
Next
li_dec = abs((round(nImp,2) - truncate(nImp,0)) *100)
sA = sA + ' con ' + String(li_dec) + "/100"
Return  sA

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas