Numero en letras(crystal sintax)
Publicado por rtb (3 intervenciones) el 07/02/2009 15:44:19
les dejo por si a alquien les interesa...convertir numero a letras...
solo hay que cambiar la variable x por el campo correspondiente que se quiere convertir..
para el código se uso la crystal sintax
//ToWords ({#RTot_exenta})
numberVar x := 5654251354;
stringVar unidad :="" ;
stringVar decena :="" ;
stringVar centena :="" ;
stringVar umil :="" ;
stringVar dmil :="" ;
stringVar cmil :="" ;
stringVar umill :="" ;
stringVar dmill :="" ;
stringVar cmill :="" ;
stringVar umilmil :="" ;
stringVar dmilmil :="" ;
stringVar cmilmil :="" ;
stringVar caracter:="" ;
numberVar i :=0 ;
//numberVar long :=length(totext({#RTot_exenta})) ;
numberVar long :=length(totext(x)) ;
numberVar lugar :=0;
//caracter:=totext(round({#RTot_exenta}));
caracter:=totext(x);
i=long;
lugar:=long;
//000 123 456 789.00
for i :=1 to long step 1 do
(
//123 decimales 456 unidades
if i=4 then
(
unidad:=left(right(caracter,i),1);
)
else if i=5 then
(
decena:=left(right(caracter,i),1);
)
else if i=6 then
(
centena:=left(right(caracter,i),1);
);
//miles
if i=8 then
(
umil:=left(right(caracter,i),1);
)
else if i=9 then
(
dmil:=left(right(caracter,i),1);
)
else if i=10 then
(
cmil:=left(right(caracter,i),1);
);
//millones
if i=12 then
(
umill:=left(right(caracter,i),1);
)
else if i=13 then
(
dmill:=left(right(caracter,i),1);
)
else if i=14 then
(
cmill:=left(right(caracter,i),1);
);
//mil millones
if i=16 then
(
umilmil:=left(right(caracter,i),1);
)
else if i=17 then
(
dmilmil:=left(right(caracter,i),1);
)
else if i=18 then
(
cmilmil:=left(right(caracter,i),1);
)
);
//caracter+ " umil="+umill+ " decena="+ dmill +" centena: "+ cmill;
////123 456 789.00
stringVar array unidades := ["un","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"];
stringVar array dieces := ["once","doce","trece","catorce","quince","diez y seis","diez y siete","diez y ocho","diez y nueve"];
stringVar array decenas := ["diez","veinte","treinta","cuarenta","cincuenta","sesenta","setenta","ochenta","noventa"];
stringVar array centenas := ["ciento","doscientos","trescientos","cuatrocientos","quinientos","seiscientos","setecientos","ochocientos","novecientos"];
stringVar resultado:="";
stringVar procesar:="N";
//mil millones igual a los miles
procesar:="N";
if val(cmilmil)>0 then
resultado:=resultado + centenas[val(cmilmil)] + " ";
if val(dmilmil)>1 then
resultado:=resultado + decenas[val(dmilmil)] + " y "
else if val(dmilmil)=1 then
procesar:="S";
if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(umilmil)>0 then
resultado:=resultado + dieces[val(umilmil)] + " ";
)
else
(
if val(umilmil)>0 then
resultado:=resultado + unidades[val(umilmil)] + " ";
);
if val(cmilmil)+val(dmilmil)+val(umilmil) >1 then
resultado:=resultado + " mil "
else
resultado:=resultado + "";
procesar:="N";
if val(cmill)>0 then
resultado:=resultado + centenas[val(cmill)] + " ";
if val(dmill)>1 then
resultado:=resultado + decenas[val(dmill)] + " y "
else if val(dmill)=1 then
procesar:="S";
if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(umill)>0 then
resultado:=resultado + dieces[val(umill)] + " ";
)
else
(
if val(umill)>0 then
resultado:=resultado + unidades[val(umill)] + " ";
);
//
//Titulo final de millones
//
if val(cmill)+val(dmill)+val(umill) >1 then
resultado:=resultado + " millones "
else
resultado:=resultado + " millon ";
procesar:="N";
if val(cmil)>0 then
resultado:=resultado + centenas[val(cmil)] + " ";
if val(dmil)>1 then
resultado:=resultado + decenas[val(dmil)] + " y "
else if val(dmil)=1 then
procesar:="S";
if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(umil)>0 then
resultado:=resultado + dieces[val(umil)] + " ";
)
else
(
if val(umil)>0 then
resultado:=resultado + unidades[val(umil)] + " ";
);
resultado:=resultado + " mil ";
procesar:="N";
if val(centena)>0 then
resultado:=resultado + centenas[val(centena)] + " ";
if val(decena)>1 then
resultado:=resultado + decenas[val(decena)] + " y "
else if val(decena)=1 then
procesar:="S";
if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(unidad)>0 then
resultado:=resultado + dieces[val(unidad)] + " "
)
else
(
if val(unidad)>0 then
resultado:=resultado + unidades[val(unidad)] + " ";
);
resultado:=resultado + ReplicateString ("-",50 );
resultado;
saludos.-
solo hay que cambiar la variable x por el campo correspondiente que se quiere convertir..
para el código se uso la crystal sintax
//ToWords ({#RTot_exenta})
numberVar x := 5654251354;
stringVar unidad :="" ;
stringVar decena :="" ;
stringVar centena :="" ;
stringVar umil :="" ;
stringVar dmil :="" ;
stringVar cmil :="" ;
stringVar umill :="" ;
stringVar dmill :="" ;
stringVar cmill :="" ;
stringVar umilmil :="" ;
stringVar dmilmil :="" ;
stringVar cmilmil :="" ;
stringVar caracter:="" ;
numberVar i :=0 ;
//numberVar long :=length(totext({#RTot_exenta})) ;
numberVar long :=length(totext(x)) ;
numberVar lugar :=0;
//caracter:=totext(round({#RTot_exenta}));
caracter:=totext(x);
i=long;
lugar:=long;
//000 123 456 789.00
for i :=1 to long step 1 do
(
//123 decimales 456 unidades
if i=4 then
(
unidad:=left(right(caracter,i),1);
)
else if i=5 then
(
decena:=left(right(caracter,i),1);
)
else if i=6 then
(
centena:=left(right(caracter,i),1);
);
//miles
if i=8 then
(
umil:=left(right(caracter,i),1);
)
else if i=9 then
(
dmil:=left(right(caracter,i),1);
)
else if i=10 then
(
cmil:=left(right(caracter,i),1);
);
//millones
if i=12 then
(
umill:=left(right(caracter,i),1);
)
else if i=13 then
(
dmill:=left(right(caracter,i),1);
)
else if i=14 then
(
cmill:=left(right(caracter,i),1);
);
//mil millones
if i=16 then
(
umilmil:=left(right(caracter,i),1);
)
else if i=17 then
(
dmilmil:=left(right(caracter,i),1);
)
else if i=18 then
(
cmilmil:=left(right(caracter,i),1);
)
);
//caracter+ " umil="+umill+ " decena="+ dmill +" centena: "+ cmill;
////123 456 789.00
stringVar array unidades := ["un","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"];
stringVar array dieces := ["once","doce","trece","catorce","quince","diez y seis","diez y siete","diez y ocho","diez y nueve"];
stringVar array decenas := ["diez","veinte","treinta","cuarenta","cincuenta","sesenta","setenta","ochenta","noventa"];
stringVar array centenas := ["ciento","doscientos","trescientos","cuatrocientos","quinientos","seiscientos","setecientos","ochocientos","novecientos"];
stringVar resultado:="";
stringVar procesar:="N";
//mil millones igual a los miles
procesar:="N";
if val(cmilmil)>0 then
resultado:=resultado + centenas[val(cmilmil)] + " ";
if val(dmilmil)>1 then
resultado:=resultado + decenas[val(dmilmil)] + " y "
else if val(dmilmil)=1 then
procesar:="S";
if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(umilmil)>0 then
resultado:=resultado + dieces[val(umilmil)] + " ";
)
else
(
if val(umilmil)>0 then
resultado:=resultado + unidades[val(umilmil)] + " ";
);
if val(cmilmil)+val(dmilmil)+val(umilmil) >1 then
resultado:=resultado + " mil "
else
resultado:=resultado + "";
procesar:="N";
if val(cmill)>0 then
resultado:=resultado + centenas[val(cmill)] + " ";
if val(dmill)>1 then
resultado:=resultado + decenas[val(dmill)] + " y "
else if val(dmill)=1 then
procesar:="S";
if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(umill)>0 then
resultado:=resultado + dieces[val(umill)] + " ";
)
else
(
if val(umill)>0 then
resultado:=resultado + unidades[val(umill)] + " ";
);
//
//Titulo final de millones
//
if val(cmill)+val(dmill)+val(umill) >1 then
resultado:=resultado + " millones "
else
resultado:=resultado + " millon ";
procesar:="N";
if val(cmil)>0 then
resultado:=resultado + centenas[val(cmil)] + " ";
if val(dmil)>1 then
resultado:=resultado + decenas[val(dmil)] + " y "
else if val(dmil)=1 then
procesar:="S";
if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(umil)>0 then
resultado:=resultado + dieces[val(umil)] + " ";
)
else
(
if val(umil)>0 then
resultado:=resultado + unidades[val(umil)] + " ";
);
resultado:=resultado + " mil ";
procesar:="N";
if val(centena)>0 then
resultado:=resultado + centenas[val(centena)] + " ";
if val(decena)>1 then
resultado:=resultado + decenas[val(decena)] + " y "
else if val(decena)=1 then
procesar:="S";
if procesar="S" then //quiere decir que es un numero entre 11 y 20
(
if val(unidad)>0 then
resultado:=resultado + dieces[val(unidad)] + " "
)
else
(
if val(unidad)>0 then
resultado:=resultado + unidades[val(unidad)] + " ";
);
resultado:=resultado + ReplicateString ("-",50 );
resultado;
saludos.-
Valora esta pregunta
0