Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 13-05-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Jovalca,

Cita:
...Problema con Numero a Letra - Muestra "Un Mil" en vez de "Mil"...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Convierte numeros a letras de forma recursiva

function NumbersToLetters(Number: Double): string;

const
  Numbers: array[1..9] of String = ('Uno', 'Dos', 'Tres', 'Cuatro',
    'Cinco', 'Seis', 'Siete', 'Ocho', 'Nueve');

  Numbers2: array[11..19] of String = ('Once', 'Doce', 'Trece', 'Catorce',
    'Quince', 'Diez y Seis', 'Diez y Siete', 'Diez y Ocho', 'Diez y Nueve');

  Tenths: array[1..9] of String = ('Diez', 'Veinte', 'Trienta', 'Cuarenta',
    'Cincuenta', 'Sesenta', 'Setenta', 'Ochenta', 'Noventa');

  Hundreds : array[1..9] of String = ('Cien ', 'Docientos ', 'Trecientos ', 'Cuatrocientos ',
    'Quinientos ', 'Seicientos ', 'Setecientos ', 'Ochocientos ', 'Novecientos ');

  Min = 1.00;
  Max = 1000000000.00;
  
  function RecurseNumber(N: LongWord): string;
  begin
    case N of

      1..9:
        begin
           Result := Numbers[N];
        end;

      11..19:
        begin
           Result := Numbers2[N]
        end;

      10,20..99:
        begin
           if (N Mod 10) = 0 then
              Result := Tenths[N div 10] + RecurseNumber(N mod 10)
           else
              Result := Tenths[N div 10] + ' y '  + RecurseNumber(N mod 10);
        end;

      100..999:
      begin
        if (N = 100) or (N >=200) then Result := Hundreds[N div 100] + RecurseNumber(N mod 100);
        if (N >100) and (N<200) then Result := 'Ciento ' + RecurseNumber(N mod 100);
      end;

      1000..999999:
      begin
         if (Number >=1000) and (Number < 2000) then
            Result := 'Un Mil ' + RecurseNumber(N mod 1000)
         else
            Result := RecurseNumber(N div 1000) + ' Mil ' + RecurseNumber(N mod 1000);
      end;

      1000000..999999999:
      begin
         if (Number>=1000000) and (Number<2000000) then
            Result := 'Un Millon ' + RecurseNumber(N mod 1000000)
         else
            Result := RecurseNumber(N div 1000000) + ' Millones ' + RecurseNumber(N mod 1000000);
      end;

    end; {Case N of}

  end; {RecurseNumber}

begin
  if (Number >= Min) and (Number < Max) then
     begin
        Result := RecurseNumber(Round(Int(Number)));
        Result := Result +  ' con ' + Format('%.2d',[Round(Frac(Number) * 100)]) + '/100';
     end
  else
     Result := '-1';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   N1 : Double;
begin
   if TryStrToFloat(Edit1.Text,N1) then 
      ShowMessage(NumbersToLetters(N1)); 
end;

end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32, convierte recursivamente números a letras en el rango de 1.00 a 999999999.99 teniendo la posibilidad de cambiar un mil por mil, sin embargo es más preciso y seguro al momento de hacer un cheque usar un mil en vez de mil. Un ejemplo de conversión es el que se muestra en la siguiente imagen:



Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 13-05-2014 a las 17:14:47.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Usar TServerSocket y TClientSocket para enviar "streams" más o menos "grandes" dec Internet 9 04-08-2015 16:11:50
Existe algun componente "linea" y "vista miniatura"? DSK25 C++ Builder 6 09-06-2013 01:23:05
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 22:05:40
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" Xavierator Varios 3 27-10-2008 09:09:50
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53


La franja horaria es GMT +2. Ahora son las 10:55:37.


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