Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
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 18:14:47.
Responder Con Cita
  #2  
Antiguo 13-05-2014
Jovalca Jovalca is offline
Miembro
NULL
 
Registrado: sep 2013
Ubicación: Madrid - España
Posts: 30
Poder: 0
Jovalca Va por buen camino
Gracias a los dos por responder.

Yo tampoco creo que sea incorrecta la expresión UN MIL, sólo que la gente por lo general esta acostumbra a leer o escribir MIL EUROS en vez de UN MIL EUROS, más que nada era por eso.

En cuanto al código, creo que lo dejaré así ya que el que tengo contempla traducir también los decimales. Solo quería saber si se podia quitar fácilmente el UN.

Muchas gracias de nuevo a los dos.

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


La franja horaria es GMT +2. Ahora son las 04:22:38.


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