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...
Respuesta de carloscharly
2
2
carloscharly, Les dejo mi msn [email protected]
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
$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.
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')
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...
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
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
- Compartir respuesta
- Anónimo
ahora mismo
1 respuesta más de otro experto
Respuesta de luisrhp
2
2
luisrhp, Programador Senior en power builder 6
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.
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
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
- Compartir respuesta
- Anónimo
ahora mismo