Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-05-2012
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
error cuando ingreso cantidad de 1 millon

Hola amigos de nuevo yo y no estoy repitiendo la misma pregunta pero es secuencia de lo que estado haciendo ayer y ahora me vino otro problemilla, resulta que estoy haciendo una factura y en un memo pongo al querer poner 1,000,000 me muestra el siguiente error.



Tambien les anexo el codigo que estoy usando para este programa que estoy haciendo para ver si me puede ayudar a decirme el porque el error. De antemano gracias.

Código Delphi [-]
procedure TFACTURA.Memo2Change(Sender: TObject);
var
 Suma,n1,n2: Extended;
 N,i: integer;
 Sep: string[2];
 SALIR : BOOLEAN;

begin
  SALIR:=FALSE;
  N := LENGTH(MEMO1.Text);
  REPEAT
    IF COPY(MEMO2.Text, N, 1) = ' ' THEN SALIR:=TRUE;
    N:=N-1;
  UNTIL (N<1) OR (SALIR=TRUE);

  ULTPALABRA := COPY(MEMO2.TEXT, N+1, LENGTH(MEMO2.TEXT)-N);

  Sep[1]:= ThousandSeparator;
  Sep[2]:= DecimalSeparator;
  DecimalSeparator:= '.';
  ThousandSeparator:= ',';
  Suma:= 0;
  for i:= 0 to Memo2.Lines.Count - 1 do
    suma := suma + StrToFloat(StringReplace(Memo2.Lines[i],',','',[rfIgnoreCase]));
  Edit8.Text:= FloatToStrF(suma, ffNumber, 20, 2);


  n1:=  0.16* StrToFloat(StringReplace(Edit8.Text,',','',[rfIgnoreCase])); // Multiplicar
  Edit9.Text:= FloatToStrF(n1, ffNumber, 20, 2);  // Mostrar

 n1:= StrToFloat(StringReplace(edit8.Text,',','',[rfIgnoreCase]));
 n2:= StrToFloat(stringReplace(edit9.Text,',','',[rfIgnoreCase]));
 edit10.Text:=FloatToStrF(n1+n2,ffNumber,20,2);

 label22.Caption:=CantidadEnLetra(StrtoFloat(stringReplace(edit10.Text,',','',[rfIgnoreCase])),1);
  //...
  ThousandSeparator:= Sep[1];
  DecimalSeparator:= Sep[2]

end;

Y este codigo siguiente lo pongo en Onkeypress
Código Delphi [-]
procedure TFACTURA.Memo2KeyPress(Sender: TObject; var Key: Char);
 begin
 IF (KEY = #13) AND (LABEL1.CAPTION <> '') THEN
  BEGIN
    KEY:=#0;
    MEMO2.TEXT := STRINGREPLACE(MEMO2.Text, TRIM(ULTPALABRA), FORMATFLOAT('##,##,##0.00',STRTOFLOAT(ULTPALABRA)), [RFREPLACEALL]);
    MEMO2.SelStart := LENGTH(MEMO2.TEXT);
  end;
end;

De lo cual fue codigo que me ayudaron en otro post para que el memo separara la cantidad en miles pero ahora implementarlo me aparece error ya que el memo realiza un calculo y al llegar a la cifra de un millon me manda el error que les comento, bueno espero que me ayuden o si pueden me digan donde la estoy regando y de antemano gracias.
Responder Con Cita
  #2  
Antiguo 25-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y el error?
Responder Con Cita
  #3  
Antiguo 25-05-2012
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Sorry le pongo el link del error http://tinypic.com/r/eeovr/6
Responder Con Cita
  #4  
Antiguo 25-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ya veo, el error es: '1000,' is not a valid floating point value.
Responder Con Cita
  #5  
Antiguo 25-05-2012
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
si, ya que cuando empiezo a digitar mas de 6 fracciones me envia ese error.
Responder Con Cita
  #6  
Antiguo 25-05-2012
Avatar de champy
champy champy is offline
Miembro
 
Registrado: sep 2003
Ubicación: Alicante, España
Posts: 75
Poder: 21
champy Va por buen camino
Creo que el error lo tienes en esta linea

Código Delphi [-]
suma := suma + StrToFloat(StringReplace(Memo2.Lines[i],',','',[rfIgnoreCase]));

Básicamente estás eliminando las comas para poder hacer el cambio de Str a Float, pero solamente eliminas la primera coma. Así que cuando hay más de 1 (1,000,000) te da el cascazo.

Ademas, el ignoreCase no tiene mucho sentido, nunca he visto una ',' en mayúsculas

prueba cambiando por

Código Delphi [-]
suma := suma + StrToFloat(StringReplace(Memo2.Lines[i],',','',[rfReplaceAll]));
Responder Con Cita
  #7  
Antiguo 25-05-2012
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Amigo Champy he probado tu codigo que mencionas pero me sigue saliendo el mismo error, al digitar mas de 6 cifras.
Responder Con Cita
  #8  
Antiguo 25-05-2012
Avatar de champy
champy champy is offline
Miembro
 
Registrado: sep 2003
Ubicación: Alicante, España
Posts: 75
Poder: 21
champy Va por buen camino
Podrías decirnos en que linea te da el error? así será más facil tratar de discernir el porque
Por otro lado, veo que lo mismo lo haces en más de una linea, si el problema fuese el que te dije antes y lo cambiaste, se repetiria en la liguiente linea.
Código Delphi [-]
  suma := suma + StrToFloat(StringReplace(Memo2.Lines[i],',','',[rfIgnoreCase]));
  n1:=  0.16* StrToFloat(StringReplace(Edit8.Text,',','',[rfIgnoreCase])); // Multiplicar
  n1:= StrToFloat(StringReplace(edit8.Text,',','',[rfIgnoreCase]));
  n2:= StrToFloat(stringReplace(edit9.Text,',','',[rfIgnoreCase]));
  label22.Caption:=CantidadEnLetra(StrtoFloat(stringReplace(edit10.Text,',','',[rfIgnoreCase])),1);

Última edición por champy fecha: 25-05-2012 a las 23:53:28.
Responder Con Cita
  #9  
Antiguo 25-05-2012
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Es cuando ingreso la cantidad de 100000 y al poner el 6 digito me vota el error y la verdad nose en que linea me da el error ya que me arroja la venta del mensaje del error.
Responder Con Cita
  #10  
Antiguo 26-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por rufo Ver Mensaje
Es cuando ingreso la cantidad de 100000 y al poner el 6 digito me vota el error y la verdad nose en que linea me da el error ya que me arroja la venta del mensaje del error.
El programa se detiene en la línea del error, y en todo caso pon puntos de ruptura para que vaya parando de línea en línea.
O haz los cambios indicados por champy en todas las líneas que has puesto ese código.
Responder Con Cita
  #11  
Antiguo 26-05-2012
Avatar de champy
champy champy is offline
Miembro
 
Registrado: sep 2003
Ubicación: Alicante, España
Posts: 75
Poder: 21
champy Va por buen camino
No se te parará en el error porque probablemente estás compilando y despues lanzas el .EXE.
En lugar de eso, ejecuta el programa directamente desde Delphi (F9) y cuando se de el error el debuguer te llevará automáticamente a la linea donde se ha producido el problema.
Responder Con Cita
  #12  
Antiguo 26-05-2012
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Amigos tengo noticias nuevas y frescas, ya me quedo mi problema resulto y en efecto tenian razón deberia de cambiar esa linea de codigo en donde la programe en las demas, bueno de antemanos les agradesco mucho y me gusto mucho este foro, saludos desde México.
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
ayuda, cantidad de registros de una consulta anda cuando quiere Patricio Varios 7 05-09-2011 10:52:51
Error en cantidad de columnas. patorecalde Varios 3 12-06-2008 19:11:16
cuando a una fecha le resto una cantidad de dias,no se en que formato enviar el param federiconqn21 Firebird e Interbase 1 10-04-2006 16:32:37
Como Cambiar Una Cantidad Numerica En Una Cantidad En Letra AdIIX Varios 3 28-04-2005 21:45:23


La franja horaria es GMT +2. Ahora son las 21:44:46.


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
Copyright 1996-2007 Club Delphi