Ver Mensaje Individual
  #3  
Antiguo 18-09-2006
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Reputación: 10
marcoszorrilla Va por buen camino
Código Delphi [-]
    Convertir una cifra numerica a cantidad en letra (15 -> "QUINCE") 

   Util para rellenar los impresos de giros de correos, por ejemplo 

      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;

Yo tenía esta función guardada por ahí a ver si te sirve la idea.

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