¿Cómo puedo cambiar un número a su valor en letra apretando un botón en una caja de texto?

Respuesta de
a
Usuario
Necesito saber como puedo hacer para que al escribir un numero y pulsart un botón en otra caja de texto me aparezca el mismo numero pero en lñetras, por ejemplo: "15", "quince", ademas debe ser desde 1 hasta 1'000,000, se que hay una sentencia que lo hace, pero no se cual es... responde por favor.
Avatar
Experto
Hola

Nunca había escuchado de la sentencia que haga eso. En todo caso de existir probablemente te lo devuelva en ingles.
Cuando necesite algo así la función la hice yo.

Saludos
AldoB
POr favor cerra la pregunta
Usuario
Bueno, muchas gracias por responder, en todo caso, me gustaría saber como puedo hacer porque es un trabajo y no tengo ni una pequeña idea de como hacerlo, puesto que no puede hacerse con if ni con choose case porque es hasta 1'000,000, ayudame por favor...
Avatar
Experto
Te paso las 2 fx exportadas

//////////////
$PBExportHeader$f_numero_xxx_aletras.srf
global type f_numero_xxx_aletras from function_object
end type

forward prototypes
global function string f_numero_xxx_aletras (long ae_valor)
end prototypes

global function string f_numero_xxx_aletras (long ae_valor);//convierte un valor de tres cifras a letras

String ls_aunidad[] = {"UN","DOS","TRES","CUATRO","CINCO","SEIS","SIETE","OCHO","NUEVE","DIEZ","ONCE","DOCE","TRECE","CATORCE","QUINCE"}
String ls_acentena[] = {"CIENTO","DOSCIENTOS","TRESCIENTOS","CUATROCIENTOS","QUINIENTOS","SEISCIENTOS","SETECIENTOS","OCHOCIENTOS","NOVECIENTOS"}
String ls_adecena[] = {"DIECI","VEINTI","TREINTA","CUARENTA","CINCUENTA","SESENTA","SETENTA","OCHENTA","NOVENTA"}
Integer li_centena, li_decena, li_unidad, li_doble
String ls_linea;

IF ae_valor = 100 THEN

ls_linea = "CIEN "

ELSE

ls_linea = ""
li_centena = ae_valor / 100
li_doble = ae_valor - (li_centena*100)
li_decena = (ae_valor / 10) - (li_centena*10)
li_unidad = (ae_valor - (li_decena*10) - (li_centena*100));

IF li_centena > 0 THEN
ls_linea = ls_linea + ls_acentena[li_centena] + " "
END IF

IF li_doble > 0 THEN
IF li_doble = 20 THEN
ls_linea = ls_linea + "VEINTE "
ELSE
IF li_doble < 16 THEN
ls_linea = ls_linea + ls_aunidad[li_doble] + " " ;
ELSE
ls_linea = ls_linea + ls_adecena[li_decena]
IF li_decena > 2 AND li_unidad <> 0 THEN ls_linea = ls_linea + " Y "
IF li_unidad > 0 THEN ls_linea = ls_linea + ls_aunidad[li_unidad] + " "
IF li_unidad = 0 THEN ls_linea = ls_linea + " "
END IF
END IF
END IF

END IF

return ls_linea
end function

/////////////
*************
$PBExportHeader$f_numeros_a_letras.srf
global type f_numeros_a_letras from function_object
end type

forward prototypes
global function string f_numeros_a_letras (double ae_valor)
end prototypes

global function string f_numeros_a_letras (double ae_valor);String ls_linea, ls_valor, ls_parte_decimal
Long ll_numero,ll_millones,ll_miles,ll_unidades
Integer li_lugar_del_punto,li_decimales


ls_valor = String(ae_valor,"#########0.00")
ll_numero = Long(ae_valor)
li_lugar_del_punto = Pos(ls_valor,".")
//ls_parte_decimal = Right(ls_valor,len(ls_valor) - li_lugar_del_punto);
ls_parte_decimal = Right(ls_valor,2)
li_decimales = Integer(ls_parte_decimal)
ls_linea = ""

IF ll_numero = 0 THEN
ls_linea = "CERO "
ELSEIF ll_numero < 0 THEN
ls_linea = "MENOS "
ELSEIF ll_numero = 1 AND li_decimales = 0 THEN
ls_linea = "UN "
return ls_linea
ELSEIF ll_numero > 1 THEN
ls_linea = ""
END IF

ll_numero = Abs(ll_numero) //valor absoluto
ll_millones = ll_numero / 1000000
ll_miles = (ll_numero - (ll_millones*1000000)) / 1000
ll_unidades = ll_numero - ((ll_millones*1000000) + ll_miles * 1000)

IF ll_millones = 1 THEN
ls_linea = ls_linea + "UN MILLON "
ELSEIF ll_millones > 1 THEN
ls_linea = ls_linea + f_numero_xxx_aletras(ll_millones) + "MILLONES "
END IF

IF ll_miles = 1 THEN
ls_linea = ls_linea + "MIL "
ELSEIF ll_miles > 1 THEN
ls_linea = ls_linea + f_numero_xxx_aletras(ll_miles)+ "MIL "
END IF

IF ll_unidades > 0 THEN ls_linea = ls_linea + f_numero_xxx_aletras(ll_unidades)

IF li_decimales = 1 THEN ls_linea = ls_linea + "CON UNO"
IF li_decimales > 1 THEN
ls_linea = ls_linea + "CON " + f_numero_xxx_aletras(li_decimales)
IF Right(ls_linea,3) = "UN " THEN ls_linea = Left(ls_linea,len(ls_linea)-1) + "O"
END IF

return ls_linea
end function

*************
Saludos
AldoB
Por favor cerra la pregunta
Usuario
Hola...
Lo he probado, pero no reconoce $PBExportHeader$, ademas arroja 2 errores de sintaxis, no se como hacer para que funcione...
Avatar
Experto
Las fx están exportadas con PB 7 pero hacelo simple, crea las funciones vos y copiales el código que te pase.
En cuanto al error de sintaxis, si haciendo lo que te puse arriba aparece pásame cual es.
Las fx andan.

Saludos
AldoB
Por favor cerra la pregunta
Avatar
Experto
Hola

Por favor cerrá la pregunta, las preguntas activas impiden que entren nuevas

Saludos
AldoB
Usuario
Bueno disculpa por no cerrarla antes, es que estuve muy ocupada con los exámenes y recién tengo tiempo, gracias por todo...