Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-11-2009
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Dudas al convertir numero en letra y centavos

Hola amigos tengo un dilema resulta que quiero pasar una cantidad numerica a letras por ejemplo $12.50 Doce con cincuenta centavos, ya pude hacer que me aparesca la cifra con letra pero ahora resulta que no veo la forma para que aparesca la palabra centavos cuando halla centavos en la cifra les anexo mi codigo que estoy usando.

Código:
function Deletrear(numero: real) : string; var
  letras: TLetras;
begin
  letras := TLetras.Create(nil);
  try
    letras.Numero := numero;
    Result := letras.AsString;
  finally
    letras.Free;
  end;
end;

procedure TAlta_factura.Button3Click(Sender: TObject);
var
 n: String;
begin
  n:= Deletrear(StrToFloat(Edit10.Text) );
  label5.Caption:= (n);
end;
Les comento que este codigo lo agarre de aqui del foro pero quiero que me aparescan la palabra centavos, bueno espero que me ayuden y gracias de antemano.
Responder Con Cita
  #2  
Antiguo 20-11-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Question

¿Que es realmente lo que deseas hacer?
¿Covertir un numero al tipo de dato String?
Cita:
Ejemplo de Float->12.50 a '12,50'<--String
¿Convertir un numero a Literal?
Cita:
Ejemplo Float->12.50 a 'Doce con 50' <--Literal
Cual de las dos cosas?.
Saludos..
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 20-11-2009
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Gracias por responder rgstuamigo lo que en si yo quiero es similar a esto
12.50 a Doce con cincuenta centavos en si eso es lo que quiero. obtener son los centavos en letra.
Responder Con Cita
  #4  
Antiguo 23-11-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por rufo Ver Mensaje
Gracias por responder rgstuamigo lo que en si yo quiero es similar a esto
12.50 a Doce con cincuenta centavos en si eso es lo que quiero. obtener son los centavos en letra.
En el club existia un truco que hace lo que pretendes,pero no he podido encontrarlo,tal parece que se ha perdido.
De todas formas en internet vas a encontrar miles de referencias de como hacerlo o componentes que ya te hacen eso por ejemplo(aqui,aqui,aqui,etc).
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 24-11-2009 a las 13:58:33.
Responder Con Cita
  #5  
Antiguo 23-11-2009
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Mírate esta función, creo que es la que mencionas que había en el Club:
Código Delphi [-]
function IntToLetras(Numerosouble):String;

        function xIntToLetras(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,numero: Longint;
         Linea : String;
         entero,decimal:variant;
         n1,n2ouble;

      begin
      entero:=Int(numeros);
      decimal:=Abs(frac(numeros) * 100);
      numero:=entero;
        {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';
                    //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 + xIntToLetras(Millones)
                                         + ' MILLONES ';

        if Miles =1 then Linea:= Linea + ' MIL '
        else if Miles>1 then Linea := Linea + xIntToLetras(Miles)+
                                      ' MIL ';

        if Unidades >0 then
        Linea := Linea + xIntToLetras(Unidades);

         //Nuevo para decimales
          numero:=decimal;
          Linea:=Linea +' Euros';

      if numero > 0 then
      begin
      Linea:=Linea +' y ';

         if numero=1 then
                  begin
                    Linea :=Linea + 'UN';
                  end
                  else if numero>1 then Linea := 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 + xIntToLetras(Millones)
                                         + ' MILLONES ';

        if Miles =1 then Linea:= Linea + ' MIL '
        else if Miles>1 then Linea := Linea + xIntToLetras(Miles)+
                                      ' MIL ';

        if Unidades >0 then
        Linea := Linea + xIntToLetras(Unidades);

        linea:=Linea+' cents';
     end;

        IntToletras:=Linea;
      end;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 23-11-2009
dao_ar dao_ar is offline
Miembro
 
Registrado: ene 2005
Ubicación: Neuquen - Argentina
Posts: 24
Poder: 0
dao_ar Va por buen camino
Numeros en Letra - Rufo

Rufo he usado ese codigo y me tome el atrevimiento de agregarle una modificacion al mismo ( no pedi permiso al autor lo cual es incorrecto y voy a corregir esa situacion) para que escriba los centavos de la siguiente forma,
166.23
ciento ........ con veintitres ctvos
o
ciento ........ con 23/100

si te sirve enviame un correo a la direccion dao_ ar@yahoo. com y te lo envio.

Última edición por marcoszorrilla fecha: 23-11-2009 a las 15:17:58.
Responder Con Cita
  #7  
Antiguo 23-11-2009
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
He incluido espacios en la dirección de correo para evitar que sea capturado por los especialistas del correo basura, por otra parte es de obligado cumplimiento en estos foros, publicar cualquier modificación o ampliación de código para que todo el mundo pueda disfrutar de los posibles beneficios de dichas modificaciones, por lo tanto no debe de contestarse a cuestiones de interés general por medio del correo privado, sino utilizando los foros que brindan su espacio para estos menesteres.

Gracias por vuestra comprensión.

Nota de Moderación.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #8  
Antiguo 23-11-2009
dao_ar dao_ar is offline
Miembro
 
Registrado: ene 2005
Ubicación: Neuquen - Argentina
Posts: 24
Poder: 0
dao_ar Va por buen camino
Numeros en Letra - M.Zorrilla

Le envie el codigo a su autor el Sr. Carlos Garcia Trujillo (cgar1136@yahoo.com) para que valore las modificaciones y lo publique si lo desea.

Atte
Daniel
Responder Con Cita
  #9  
Antiguo 23-11-2009
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Gracias amigos por sus respuestas pero sigo igual ando un poco atolondrado en esto ya que puse el codigo que me anexaron en mi pregunta pero no sale si me pudieran decir que onda con el codigo por que lo pongo tal y como es pero me marca error, si no es mucho pedir me pueden decir como ponerlo y como llamarlo y gracias de antemano.
Responder Con Cita
  #10  
Antiguo 23-11-2009
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Ejemplo de uso:

Código Delphi [-]
var
sLentras:String;
begin
//Con un Campo
sLetras:=IntToletras(Dmxxxx.FacturaTotal.value));
//con un número
sLetras:=IntToLetras(4500.33);

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #11  
Antiguo 24-11-2009
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Gracias amigo marcoszorrilla pero ya tengo un codigo que es este

Código:
Function CantidadEnLetra(curCantidad: Currency; MonNal: integer): String;
 var i: integer;
     Cantidad, Centavos: Currency;
     BloqueCero, NumeroBloques, Digito: Byte;
     PrimerDigito, SegundoDigito, TercerDigito: Byte;
     Resultado, Temp, strCentavos, Bloque: String;
     Unidades: Array[0..28] of String;
     Decenas: Array[0..8] of String;
     Centenas: Array[0..8] of String;
begin

Unidades[0] := 'UN'; Unidades[1] := 'DOS'; Unidades[2] := 'TRES'; Unidades[3] := 'CUATRO';
Unidades[4] := 'CINCO'; Unidades[5] := 'SEIS'; Unidades[6] := 'SIETE'; Unidades[7] := 'OCHO';
Unidades[8] := 'NUEVE'; Unidades[9] := 'DIEZ'; Unidades[10] := 'ONCE'; Unidades[11] := 'DOCE';
Unidades[12] := 'TRECE'; Unidades[13] := 'CATORCE'; Unidades[14] := 'QUINCE'; Unidades[15] := 'DIECISÉIS';
Unidades[16] := 'DIECISIETE'; Unidades[17] := 'DIECIOCHO'; Unidades[18] := 'DIECINUEVE';
Unidades[19] := 'VEINTE'; Unidades[20] := 'VEINTIUNO'; Unidades[21] := 'VEINTIDÓS';
Unidades[22] := 'VEINTITRÉS'; Unidades[23] := 'VEINTICUATRO'; Unidades[24] := 'VEINTICINCO';
Unidades[25] := 'VEINTISÉIS'; Unidades[26] := 'VEINTISIETE'; Unidades[27] := 'VEINTIOCHO'; Unidades[28] := 'VEINTINUEVE';

Decenas[0] := 'DIEZ'; Decenas[1] := 'VEINTE'; Decenas[2] := 'TREINTA'; Decenas[3] := 'CUARENTA';
Decenas[4] := 'CINCUENTA'; Decenas[5] := 'SESENTA'; Decenas[6] := 'SETENTA'; Decenas[7] := 'OCHENTA'; Decenas[8] := 'NOVENTA';

Centenas[0] := 'CIENTO'; Centenas[1] := 'DOSCIENTOS'; Centenas[2] := 'TRESCIENTOS'; Centenas[3] := 'CUATROCIENTOS';
Centenas[4] := 'QUINIENTOS'; Centenas[5] := 'SEISCIENTOS'; Centenas[6] := 'SETECIENTOS'; Centenas[7] := 'OCHOCIENTOS'; Centenas[8] := 'NOVECIENTOS';

Cantidad := Trunc(curCantidad);
Centavos := (curCantidad - Cantidad) * 100;
NumeroBloques := 1;
Repeat
 PrimerDigito := 0;
 SegundoDigito := 0;
 TercerDigito := 0;
 Bloque := '';
 BloqueCero := 0;
 For i := 1 To 3 do begin
  Digito := Round(Cantidad) Mod 10;
  If Digito <> 0 Then begin
   Case i of
    1: begin
     Bloque := ' ' + Unidades[Digito - 1];
     PrimerDigito := Digito;
    end; //case 1
    2: begin
      If Digito <= 2 Then begin
       Bloque := ' ' + Unidades[(Digito * 10 + PrimerDigito - 1)];
      end Else begin
       If PrimerDigito <> 0 then
        Temp := ' Y' else Temp := '';
       Bloque := ' ' + Decenas[Digito - 1] + Temp + Bloque;
      End; //if
      SegundoDigito := Digito;
     end; //case 2
    3: begin
     If (Digito = 1) and (PrimerDigito = 0) and (SegundoDigito = 0) then
      Temp := 'CIEN' else Temp := Centenas[Digito-1];
     Bloque := ' ' + Temp + Bloque;
     TercerDigito := Digito;
     end; //case 3
    End; //case
  end Else begin
  BloqueCero := BloqueCero + 1;
  End; // If Digito <>0
  Cantidad := Int(Cantidad / 10);
  If Cantidad = 0 Then begin
   Break;
  End; // If Cantidad=0
 end; //for
 Case NumeroBloques of
  1:
   Resultado := Bloque;
  2: begin
   if BloqueCero = 3 then
    Temp := '' else Temp := ' MIL';
   Resultado := Bloque + Temp + Resultado;
   end; //case 2
  3: begin
   If (PrimerDigito = 1) and (SegundoDigito = 0) and (TercerDigito = 0) then
    Temp := ' MILLON' else Temp := ' MILLONES';
   Resultado := Bloque + Temp + Resultado;
   end; //case 3
 End; //case
 NumeroBloques := NumeroBloques + 1;
Until Cantidad = 0; //repeat
case MonNal of
 0: begin
 If curCantidad > 1 then
  Temp := ' CENTAVOS ***' else Temp := ' CENTAVO ***';
 CantidadEnLetra := Resultado + Temp;

 end;
 1: begin
   If curCantidad > 1 then
    Temp := ' PESOS ' else Temp := ' PESO ';
   if Centavos=0 then strCentavos := '' else strCentavos := 'CON '+CantidadEnLetra(Centavos, 0);
   CantidadEnLetra := 'SON: *** ' + Resultado + Temp + strCentavos;
 end;
 2: begin
  If curCantidad > 1 then
   Temp := ' DLLS ' else Temp := ' DOLAR ';
   if Centavos=0 then strCentavos := '' else strCentavos := 'CON '+CantidadEnLetra(Centavos, 0);
   CantidadEnLetra := 'SON: *** ' + Resultado + Temp + strCentavos;
 end;
end;

End;
Este codigo es del amigo Contraveneno fue el que encontre todo marcha bien pero ahora como le hago para ejecutar esta funcion quiero decir que codigo le pongo en el objeto de un boton ya que cuando le de clic me convierta la cantidad en letra, ya que puse este codigo en el boton pero me marcar error

Código:
var
 i: string;
begin
i:= CantidadEnLetra(StrToFloat(Edit1.Text) );
label1.Caption:= (i);
end;
Entonces nose que este haciendo mal, espero que me auxilien ya que llevo dias con esto y gracias de nuevo.
Responder Con Cita
  #12  
Antiguo 26-11-2009
Avatar de krlox31416
krlox31416 krlox31416 is offline
Miembro
 
Registrado: jun 2008
Ubicación: San Juan del Río, Querétaro, México
Posts: 75
Poder: 16
krlox31416 Va por buen camino
tal vez te falta convertir el punto a coma

Seguramente te marca error porque en tu edit estas capturando 123.50 en vez de 123,50 por eso te marca el error si capturas una cantidad manualmente como 123,50 veras que la función de contraveneno funciona y eso te lo aseguro porque yo tambien use su función pero no me acordaba que hay que convertir el punto decimal a coma para que muestre los centavos si no quieres hacer uso de la funcion strFormatDecimal validar que solo te permita capturar coma en vez de punto decimal

esta función lo que hece es convertir el punto decimal a coma

Código Delphi [-]
Function strFormatDecimal(strNum: String): String; // FUNCIÓN PARA AGREGAR UNA COMA Y EVITAR EL ERROR DE EXCEPCION
begin
if (AnsiPos('.', strNum) <> 0) then
    strNum := Copy(strNum, 0, AnsiPos('.', strNum)-1) + ',' +
    Copy(strNum, AnsiPos('.', strNum) + 1, Length(strNum)-AnsiPos('.', strNum));
if strNum = '' then strNum := '0';
   strFormatDecimal := strNum;
end;

asi la llamas

Código Delphi [-]
Edit2.Text:= strFormatDecimal(Edit1.Text);
valor:= StrToFloat(Edit2.Text)////////donde valor es de tipo extended 
Edit3.Text:= FloatToStr(valor);

y luego llamar la función CantidadEnLetra

Código Delphi [-]
var
i: integer;   // para el case
begin
i:=1;
Edit4.Text:=CantidadEnLetra(StrToFloat(Edit3.Text),i);
end;


o tu problema es ese o estas haciendo mal uso de los datos porque si es eso deberias analizar lo que hace el codigo...
saludos!!!
__________________
el cielo me dio un cariño sin merecerlo... chimikuilo!!!
Responder Con Cita
  #13  
Antiguo 26-11-2009
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Gracias amigos ya quedo listo.
Responder Con Cita
  #14  
Antiguo 27-11-2009
Avatar de krlox31416
krlox31416 krlox31416 is offline
Miembro
 
Registrado: jun 2008
Ubicación: San Juan del Río, Querétaro, México
Posts: 75
Poder: 16
krlox31416 Va por buen camino
pregunta!

por pura curiosidad que era lo que estabas haciendo mal que no te arrojaba el resultado?

saludos.
__________________
el cielo me dio un cariño sin merecerlo... chimikuilo!!!
Responder Con Cita
  #15  
Antiguo 27-11-2009
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Smile

ok amigos les voy aponer mi codigo ya funcionando del cual les agradesco mucho sus contestaciones.

Código:
procedure TAlta_factura.Button1Click(Sender: TObject);
var
  no1,no2:double;
  no3,no4:real;
begin
 if (edit4.text='')then
    edit4.Text:='0';
  if edit6.text='' then
    edit6.Text:='0';
  no1:=strtofloat(edit4.Text);
  no2:=strtofloat(edit6.Text);
 edit7.Text:=formatfloat('0.00',no1+no2);

 no3:=strtofloat(edit10.Text);
 edit8.text:=formatfloat('0.00',no3/1.15);
 no4:=strtofloat(edit8.Text);
 edit9.Text:=formatfloat('0.00',no4*0.15);
 label5.Caption:=CantidadEnLetra(StrtoFloat(edit10.Text),1);
end;
La funcion es la que puse aqui en mi pregunta y de nuevo gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
45 Centavos enecumene Humor 5 23-10-2008 17:51:23
Como convertir numero entero en letra kurono Varios 2 23-01-2008 05:10:39
Convertir numero en cadena rex JAVA 7 25-10-2007 03:28:11
Convertir Numero a Letras... en frances jcarteagaf Varios 4 11-09-2007 19:23:45
De número a letra samame Varios 1 10-03-2004 17:31:41


La franja horaria es GMT +2. Ahora son las 23:40:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi