PDA

Ver la Versión Completa : error cuando ingreso cantidad de 1 millon


rufo
25-05-2012, 21:24:13
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.

http://tinypic.com/r/eeovr/6

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.


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

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.

Casimiro Notevi
25-05-2012, 22:08:33
¿Y el error?

rufo
25-05-2012, 23:08:06
Sorry le pongo el link del error http://tinypic.com/r/eeovr/6

Casimiro Notevi
25-05-2012, 23:13:23
Ya veo, el error es: '1000,' is not a valid floating point value.

rufo
25-05-2012, 23:20:58
si, ya que cuando empiezo a digitar mas de 6 fracciones me envia ese error.

champy
25-05-2012, 23:37:43
Creo que el error lo tienes en esta linea

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 :D

prueba cambiando por

suma := suma + StrToFloat(StringReplace(Memo2.Lines[i],',','',[rfReplaceAll]));

rufo
25-05-2012, 23:42:11
Amigo Champy he probado tu codigo que mencionas pero me sigue saliendo el mismo error, al digitar mas de 6 cifras.

champy
25-05-2012, 23:49:02
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.

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);

rufo
25-05-2012, 23:53:41
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.

Casimiro Notevi
26-05-2012, 00:02:36
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.

champy
26-05-2012, 00:06:24
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.

rufo
26-05-2012, 00:38:46
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.