Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como no traducir la parte fraccionaria de x cantidad (https://www.clubdelphi.com/foros/showthread.php?t=31361)

Nelly 05-05-2006 16:46:50

Como no traducir la parte fraccionaria de x cantidad
 

Hola a todos, tengan un lindo dia.

Mi pregunta es la siguiente, ¿Como le hago para que al momento de convertir en letras una cantidad x, no se tradusca la parte decimal?, por ejemplo: 25.36 la forma correcta sería (Veinticinco 36/100), el componente que utilizo es el ATexto, y aun no se como hacer que no me muestre la traducción del decimal. El caso es que cuando tradusco una cantidad lo hace de la esta forma: 'Veinticinco con treinta y seis', podrian ayudarme, se que a veces las cosas no son tan complicadas como parecen, pero si me gustaria ver un ejemplo.

Nelly (Vive y deja vivir);)

seoane 05-05-2006 17:03:38

No conozco bien el componete ATexto, pero se me ocurre que puedes utilizarlo para convertir solo la parte entera de la cantidad y añadir tu despues la parte decimal. Me explico:

Código Delphi [-]
var
  R: Real;
  ParteEntera: Integer;
  ParteDecimal: Integer;
  Resultado: string;
begin
  R:= 25.36;
  ParteEntera:= Trunc(R);
  ParteDecimal:= Trunc(Frac(R)*100);
  // Aqui convierte la parte entera con Atexto y colocalo en resultado
  // ...
  // Luego solo le tenemos que añadir la parte decimal
  Resultado:= Resultado + IntToStr(ParteDecimal) + '/100';  
end;

anghell77 09-10-2006 09:13:09

Porque no pules esta función encontrada en trucomania
probablemente, puedas endulzarla para que se ajuste a los decimales...


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;

O puedes verla más definida aquí

{Saludos}

anghell77 09-10-2006 09:20:52

JAJAJAJAJAJAJAJAJA.....Una disculpa solemne....nunca ví el título de tu Hilo..... porque lo duplicaste como "ayuda con conversión" o algo así....

Requieres la parte fraccionaria......bien.....pues eso si, aunque no está en ruso....creo que he (aunque no debió haber sucedido asi) olvidado todos mis programas que hice en pascal....tenía funciones que te devolvían hasta 10 decimales...:(:( lo siento....pero pues ya tienes una función para los enteros, puede ser que en base a ella, o aplicando un poco el trabajo de lógica sobre ésta puedas obtener más resultados, que en la espera....

Ojalá pudiera hacer más, pero creo estar a ésta hora "ciclado" (en shock)....y ojalá sirva de algo esa función....que igual y no es asi... pero algo de ayuda nunca debe ser despreciada....por inútil que ésta sea...

{Saludos}

Bicho 09-10-2006 09:29:57

Ala Fernando, entonces debes irte a dormir, buenas noches :D

Saludos

anghell77 09-10-2006 09:36:07

Te tomo la palabra....En este momento me voy....puede que mis ojos dejen de ser del dominio .com y me envíen al .net.... intente, con wwwwwww o htttttppp, o bien que siga cometiendo barbaridad y media con mi máquina....y hasta queriendo entender un poco el francés.... :D:D:D, que en mitad de la baba que le escurre a mi teclado, parece que lo escribiera perfectamente....con eso de que la "i" y la "o" estan juntas, más fácil deslizo los dedos... :D:D:D:D....

En este momento me voy....

{Au Revoir, mon ami}


La franja horaria es GMT +2. Ahora son las 07:00:17.

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