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 26-02-2009
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 17
BuRtOn Va por buen camino
transformar números a letras.

Saludos amigos tiempo sin venir por estos lados....Bueno amigos lo que necesito es algo muy simple o eso parece pero es algo más bien complejo, mire lo que sucede es que tengo que generar una factura y existe una parte de la factura que me toca hacer lo siguiente:

1. Escribir una cantidad como por ejemplo está:

10'000.000

2. en otro costado de la misma factura tiene que salir la misma cantidad ingresada pero en letras de está forma:

DIEZ MILLONES

en pocas palabras cualquier número o cifra que ingrese me toca que la aplicación me arroje sus respectivas letras como en el ejemplo anterior, aqui pongo más ejemplos:

0 ---> CERO
1 ---> ÚNO
2 ---> DOS
100 ---> CIEN
200 ---> DOCIENTOS
150.00 ---> QUINCE MIL
100.000 ---> CIEN MIL
1'800.000 ---> UN MILLÓN OCHO CIENTOS MIL

Asi sucesivamente con todos los números que desee, creo que existe un componente por que un amigo algún día lo mensiono, pero me gustaria que si alguien tiene más información sobre este proceso me colabore, muchas gracias amigos que estén muy bien.
Responder Con Cita
  #2  
Antiguo 26-02-2009
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Opción, buscar el foro y en la sección trucos. Gracias y siga participando
Responder Con Cita
  #3  
Antiguo 26-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El componente en cuestión lo puedes encontrar aquí mismo en el Club, en el FTP. Busca en Delphi-Win32|Componentes y ahí lo verás, se llama ATexto. No te pongo el enlace directo para que tengas oportunidad de pasearte por el sitio y ver que disponemos de no poco material .

// Saludos
Responder Con Cita
  #4  
Antiguo 26-02-2009
JuanHC JuanHC is offline
Miembro
 
Registrado: sep 2006
Posts: 25
Poder: 0
JuanHC Va por buen camino
Si no la encuentras

Hola,
Si no lo encuentras tal como te dicen anteriormente, puedo decirte la rutina que uso ya para pasar numeros a letras.
Quizas sea un poco "cutre", pero eso si, funciona.
Saludps
Responder Con Cita
  #5  
Antiguo 26-02-2009
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
haber si te sirve este código, lo saque de google:

Código Delphi [-]
 
procedure TForm1.Button1Click(Sender: TObject);
 
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; 
 
begin 
  Label1.Caption:= xIntToLletras(StrToInt(Edit1.Text));
end;

PD: Funciona perfecto!!!.

Última edición por cmm07 fecha: 26-02-2009 a las 13:30:48.
Responder Con Cita
  #6  
Antiguo 26-02-2009
Avatar de BuRtOn
BuRtOn BuRtOn is offline
Miembro
 
Registrado: ene 2008
Ubicación: Bucaramanga
Posts: 215
Poder: 17
BuRtOn Va por buen camino
Saludos, gracias mm07 ya hice lo que deseaba, y pues el código que expones es identico ó muy similar al del componente ATexto, pero de igual forma tambien es valido hacerlo, les agradezco amigos que me ayudaran, como siempre me sacan de aprietos....Gracias.
Responder Con Cita
  #7  
Antiguo 27-02-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
tambien te puedes chacar la función del amigo contraveneno

Puedes checar en los foros hay vartias rutinas que hacen lo que pides...
Ahora bien para evitarte de lios bajate el componente Atexto...

Yo tambien hace tiempo tenia el mismo problema...
y primero lo que hice fue entender el codigo de la funcion que me paso contraveneno...

despues la implemente... pero mi problema seguia ya que no sabia como mandar llamar su función...

Hasta ese momento todo ok´s pero despues me faltaba validar que en el edit que queria convertir numeros a latras en vez de punto decimal validart que cambie el punto decimal por una coma eso tambien lo encontre con otra función que baje y modifique...

aunque parece dificil en realidad es facil viendolo desde el punto de vita que no programes...

pero debes checar por lo menos que se intenta hacer con el codigo...

te paso la función del amigo contraveneno... aclaro que esa función la creeo él

Código Delphi [-]
´
unit Unit6;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, Buttons, Mask, Grids, DBGrids;
type
  TForm6 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Label3: TLabel;
    Bevel1: TBevel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    Bevel2: TBevel;
    Bevel3: TBevel;
    StatusBar1: TStatusBar;
    Label8: TLabel;
    Label9: TLabel;
    BitBtn6: TBitBtn;
    Timer1: TTimer;
    DBGrid1: TDBGrid;
    procedure Timer1Timer(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);
    procedure Edit5KeyPress(Sender: TObject; var Key: Char);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form6: TForm6;
  costo: extended;/// esto variable ya la ocupo para otras cosas... no es parte de la función
  mensaje:integer;///esto variable ya la ocupo para otras cosas... no es 
  cos: integer;///esto variable ya la ocupo para otras cosas... no es 
////////////////////todas las variables que siguen abajo son de la función
  i, MonNal: 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;
  Function CantidadEnLetra(curCantidad: Currency; MonNal: integer): String;// la funcion la declaro aqui porque la mando llamar en otra forma eso es opcional si tu quieres o la puedes mandar llamar en tu misma forma
  implementation
uses Unit2, Unit3;
{$R *.dfm}
Function CantidadEnLetra(curCantidad: Currency; MonNal: integer): 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] := 'DIESISEIS';
Unidades[16] := 'DIESISIETE'; Unidades[17] := 'DIESIOCHO'; Unidades[18] := 'DIESINUEVE';
Unidades[19] := 'VEINTE'; Unidades[20] := 'VEINTIUNO'; Unidades[21] := 'VEINTIDOS';
Unidades[22] := 'VEINTITRES'; Unidades[23] := 'VEINTICUATRO'; Unidades[24] := 'VEINTICINCO';
Unidades[25] := 'VEINTISEIS'; 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;
                         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;
                               SegundoDigito := Digito;
                            end;
                         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;
               End;
        end
        Else
        begin
        BloqueCero := BloqueCero + 1;
        End;
        Cantidad := Int(Cantidad / 10);
        If Cantidad = 0 Then
           begin
           Break;
           End;
           end;
Case NumeroBloques of 1:
                         Resultado := Bloque;
                      2:
                         begin
                         if BloqueCero = 3 then
                        Temp := ''
                         else
                         Temp := ' MIL';
                                 Resultado := Bloque + Temp + Resultado;
                          end;
                       3:
                          begin
                          If (PrimerDigito = 1) and (SegundoDigito = 0) and (TercerDigito = 0) then
                             Temp := ' MILLON'
                             else
                                 Temp := ' MILLONES';
                                 Resultado := Bloque + Temp + Resultado;
                          end;
                End;
                NumeroBloques := NumeroBloques + 1;
                Until Cantidad = 0;
                        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 := 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 := Resultado + Temp + strCentavos;
                                                    end;
                                          end;
end;
/// ya puedes mandar llamar la función... ya sea en esta forma o en cualquiera...

Código Delphi [-]
 
solo recuerda que en tu edit valides que ponga comas en vez de punto decimal
ej: 123.56 por 123,56 y todo saldra ok's...
/// aqui la mandas llamar segun el componente y evento que quieras usar
var i: integer;
begin
i:=1;
Edit2.Text:= CantidadEnLetra(StrToFloat(Edit1.Text),i)
end;

saludos!!!...
__________________
el cielo me dio un cariño sin merecerlo... chimikuilo!!!
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
Convertir números en letras c748a Varios 14 10-04-2015 20:52:18
Numeros a letras citlalliDgp Varios 6 19-03-2009 07:14:54
Numeros y letras Caral Varios 11 28-03-2008 18:22:53
Numeros En Letras Cañones Impresión 2 11-06-2007 23:55:12
Numeros a Letras!! jmedina Varios 26 20-10-2005 20:19:42


La franja horaria es GMT +2. Ahora son las 06:18:19.


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