PDA

Ver la Versión Completa : Pasar de numero a letras


omy
07-10-2005, 02:47:20
Hola, no es un problema, ya lo hice en c++ , me preguntaba si ya existe un control para hacer que un numero lo lo lea y me de en forma de letras

AGAG4
07-10-2005, 02:52:31
Prueba el siguiente código, a mi me funciona sin problemas... Suerte

function xIntToLletras(Numero:LongInt):String;
function xxIntToLletras(Valor:LongInt):String;
const
aUnidad : array[1..15] of String =
('UN','DOS','TRES','CUATRO','CINCO','SEIS',
'SIETE','OCHO','NUEVE','DIEZ','ONCE','DOCE',
'TRECE','CATORCE','QUINCE');
aCentena: array[1..9] of String =
('CIENTO','DOSCIENTOS','TRESCIENTOS',
'CUATROCIENTOS','QUINIENTOS','SEISCIENTOS',
'SETECIENTOS','OCHOCIENTOS','NOVECIENTOS');
aDecena : array[1..9] of String =
('DIECI','VEINTI','TREINTA','CUARENTA','CINCUENTA',
'SESENTA','SETENTA','OCHENTA','NOVENTA');
var
Centena, Decena, Unidad, Doble: LongInt;
Linea: String;
begin
if valor=100 then Linea:=' CIEN '
else begin
Linea:='';
Centena := Valor div 100;
Doble := Valor - (Centena*100);
Decena := (Valor div 10) - (Centena*10);
Unidad := Valor - (Decena*10) - (Centena*100);
if Centena>0 then Linea := Linea + Acentena[centena]+' ';
if Doble>0 then begin
if Doble=20 then Linea := Linea +' VEINTE '
else begin
if doble<16 then Linea := Linea + aUnidad[Doble]
else begin
Linea := Linea +' '+ Adecena[Decena];
if (Decena>2) and (Unidad<>0) then Linea := Linea+' Y ';
if Unidad>0 then Linea := Linea + aUnidad[Unidad];
end;
end;
end;
end;
Result := Linea;
end;
var
Millones,Miles,Unidades: Longint;
Linea : String;
begin
{Inicializamos el string que contendrá las letras según el valor
numérico}
if numero=0 then Linea := 'CERO'
else if numero<0 then Linea := 'MENOS '
else if numero=1 then
begin
Linea := 'UN';
xIntToLletras := Linea;
exit
end
else if numero>1 then Linea := '';
{Determinamos el Nº de millones, miles y unidades de numero en
positivo}
Numero := Abs(Numero);
Millones := numero div 1000000;
Miles := (numero - (Millones*1000000)) div 1000;
Unidades := numero - ((Millones*1000000)+(Miles*1000));
{Vamos poniendo en el string las cadenas de los números(llamando
a subfuncion)}
if Millones=1 then Linea:= Linea + ' UN MILLON '
else if Millones>1 then Linea := Linea + xxIntToLletras(Millones)
+ ' MILLONES ';
if Miles =1 then Linea:= Linea + ' MIL '
else if Miles>1 then Linea := Linea + xxIntToLletras(Miles)+
' MIL ';
if Unidades >0 then Linea := Linea + xxIntToLletras(Unidades);
xIntToLletras := Linea;
end;

//function DameImpConLetra(Importe:String, Moneda:byte):String;
function DameImpConLetra(Importe:String; Moneda:byte):String;
var
x:byte;
Decim,Miles:String;
begin
decim:='00';
miles:='';
for x:=1 to length(importe) do
if importe[x]='.' then begin
Miles:=copy(importe,1,x-1);
Decim:=copy(importe,x+1,2);
end;
//Determinar el Tipo de Moneda
if miles<>'' then begin
if Moneda=1 then //Si es en PESOS Entonces
result:='('+xIntToLletras(StrToInt(Miles))+' PESOS '+Decim+'/100 M.N.)'
else //Si es en DOLARES Entonces
result:='('+xIntToLletras(StrToInt(Miles))+' DOLARES '+Decim+'/100 U.S.D.)';
end else
if Moneda=1 then //Si es en PESOS Entonces
result:='('+xIntToLletras(StrToInt(importe))+' PESOS '+Decim+'/100 M.N.)'
else //Si es en DOLARES Entonces
result:='('+xIntToLletras(StrToInt(importe))+' DOLARES '+Decim+'/100 U.S.D.)';
end;


Saludos....

Sotrono
07-10-2005, 02:55:41
Si, esta en la seccion "Componentes" de la web.

Saludos...

omy
09-10-2005, 06:10:11
Gracias, ya lo realize de las dos formas.... gracias....