[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]

[Hilos de Discusión] [Fecha] [Tema] [Autor]

Re: Numeros a Letras



Hola

Lo he hecho en Basic (titipuchal de variantes incluidas VB), pascal, c,
natural , cobol (argh olvidemos malos tiempos), pero me doy cuenta que
nunca lo hice para perll, por lo que estaras obligado (moralmente) a
enviarnos la copia.

Te anexo una funcion escrita en pascal, por que aunque es la mas larga
que he hecho es la mas facil de entender (creo), y aunque se le puede
reducir codigo, al menos a mi me parece facil de seguir


Saludos
J. Miguel


---corte aqui---
Function Cnv.Numero_a_letra(numero:double):string;
const
  lonmax=12;
var
  unidad,decena,centena:char;
  numerocad,paso,Resulta:string;
  lon,numerito,numeromiles,numeromillones:int64;
begin
  Resulta:='';
  numerocad:='000000000000'+floattostr(int(numero));
  lon:=length(numerocad);
  numerocad:=copy(numerocad,lon-lonmax+1,lonmax);
  if numero<1000 then
  begin
    numerito:=strtoint(copy(numerocad,lonmax-2,3));
    unidad:=numerocad[lonmax];
    decena:=numerocad[lonmax-1];
    centena:=numerocad[lonmax-2];
    if numerito=0 then
    begin
      Result:='cero';
      exit;
    end
    else
    begin // numerito no cero
      if (decena<>'1') or (unidad>'5') then
      case unidad of
        '1': Resulta:=trim(Resulta+'UN');
        '2': Resulta:=trim(Resulta+'DOS');
        '3': Resulta:=trim(Resulta+'TRES');
        '4': Resulta:=trim(Resulta+'CUATRO');
        '5': Resulta:=trim(Resulta+'CINCO');
        '6': Resulta:=trim(Resulta+'SEIS');
        '7': Resulta:=trim(Resulta+'SIETE');
        '8': Resulta:=trim(Resulta+'OCHO');
        '9': Resulta:=trim(Resulta+'NUEVE');
      end;
      case decena of
        '1':
           case unidad of
           '0': Resulta:='DIEZ';
           '1': Resulta:='ONCE';
           '2': Resulta:='DOCE';
           '3': Resulta:='TRECE';
           '4': Resulta:='CATORCE';
           '5': Resulta:='QUINCE';
           else
             Resulta:='DIECI'+Resulta;
        end;
        '2':
          if unidad='0' then Resulta:='VEINTE'
          else Resulta:='VEINTI'+Resulta;
        '3':
          if unidad='0' then Resulta:='TREINTA'
          else Resulta:='TREINTA Y '+Resulta;
        '4':
          if unidad='0' then Resulta:='CUARENTA'
          else Resulta:='CUARENTA Y '+Resulta;
        '5':
          if unidad='0' then Resulta:='CINCUENTA'
          else Resulta:='CINCUENTA Y '+Resulta;
        '6':
          if unidad='0' then Resulta:='SESENTA'
          else Resulta:='SESENTA Y '+Resulta;
        '7':
          if unidad='0' then Resulta:='SETENTA'
          else Resulta:='SETENTA Y '+Resulta;
        '8':
          if unidad='0' then Resulta:='OCHENTA'
          else Resulta:='OCHENTA Y '+Resulta;
        '9':
          if unidad='0' then Resulta:='NOVENTA'
          else Resulta:='NOVENTA Y '+Resulta;
      end;
      case centena of
        '1': if (unidad='0') and (decena='0')
             then Resulta:='CIEN' else Resulta:='CIENTO '+Resulta;
        '2': Resulta:=trim('DOSCIENTOS '+Resulta);
        '3': Resulta:=trim('TRESCIENTOS '+Resulta);
        '4': Resulta:=trim('CUATROCIENTOS '+Resulta);
        '5': Resulta:=trim('QUINIENTOS '+Resulta);
        '6': Resulta:=trim('SEISCIENTOS '+Resulta);
        '7': Resulta:=trim('SETECIENTOS '+Resulta);
        '8': Resulta:=trim('OCHOCIENTOS '+Resulta);
        '9': Resulta:=trim('NOVECIENTOS '+Resulta);
      end;
      Result:=Resulta;
    end // numerito no cero (y numero <1000)
  end
  else
  begin  // numero>=1000
    numerito:=strtoint(copy(numerocad,lonmax-2,3));
    if numerito <>0 then Resulta:=trim(Numero_a_letra(numerito)+'
'+Resulta);
    paso:=copy(numerocad,lonmax-5,3);
    numeromiles:=strtoint(paso);
    if numeromiles <> 0 then Resulta:=trim(Numero_a_letra(numeromiles)+'
MIL'+' '+Resulta);
    paso:=copy(numerocad,lonmax-11,6);
    numeromillones:=strtoint(paso);
    if numeromillones<>0 then
Resulta:=trim(Numero_a_letra(numeromillones)+' MILLONES'+' '+Resulta);
    Result:=Resulta;
  end //x>=1000
end;
---corte aqui ---



Manuel Leos Rivas wrote:

> Alguien ha hecho de casualidad alguna rutina o
> programa para convertir un numero cualquiera a su
> equivalente en letras
> ej.:
> 67123 -> sesenta y siete mil  ciento veintitres
>
> En PERL, vbscript, VB o VBA?
>
> Se aceptan sugerencias
>
> =====
> ________________________
> Sinergia Deportiva
> Manuel Leos Rivas
> Tel.: +52 (8)376-0524/28
> Ext.: 227
> Mail: mleos en uanl mx
>
> _________________________________________________________
> Do You Yahoo!?
> Obtenga su dirección de correo-e gratis @yahoo.com
> en http://correo.espanol.yahoo.com
>
> --
> Para desuscribirse, mande correo a: ayuda-unsubscribe en linux org mx
> Para comandos adicionales, envíelo a: ayuda-help en linux org mx


-- 
Para desuscribirse, mande correo a: ayuda-unsubscribe en linux org mx
Para comandos adicionales, envíelo a: ayuda-help en linux org mx



[Hilos de Discusión] [Fecha] [Tema] [Autor]