Embarcadero

Autor Tema: [RESUELTO] is not avalid floating point value  (Leído 1911 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Kamael

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 0
  • -Tu has recibido: 0
  • Mensajes: 18
  • Calificaciones: +0/-0
[RESUELTO] is not avalid floating point value
« Topic Start: 29 de enero de 2011, 10:10:57 »
al intentar limpiar un numero determinado de edits con este codigo :
Código DELPHI
  1. For i := 0 to ComponentCount -1 do
  2. if Components[i] is TEdit then
  3. TEdit(Components[i]).Clear ;
me da el error señalado. Los edits estan convertidos a float.
« Última Modificación: 05 de febrero de 2011, 15:25:30 por eduarcol »

Comunidad Delphiaccess

[RESUELTO] is not avalid floating point value
« : 29 de enero de 2011, 10:10:57 »

Desconectado Wilson

  • Moderadores
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 597
  • -Tu has recibido: 262
  • Mensajes: 1,877
  • Calificaciones: +297/-0
  • Sexo: Masculino
Re: is not avalid floating point value
« Respuesta #1: 29 de enero de 2011, 11:27:51 »
Muy seguramente los TEdit tienen algo en el evento OnChange o en OnExit que convierte de string a Float entonces al llamar el método Clear al intentar hacer la conversión encuentra  que el TEDit vacío no es es un Float válido. Al menos es es lo que intuyo, de ser así la solución es agregar al procedimiento que convierte de string a Float la condición:

Código DELPHI
  1.  
  2. if edit.text <> '' then
  3. begin
  4. //aqui el procedimiento que convierte de string a Float
  5. end;
  6.  
  7.  
Dime de que tanto presumes y te diré de que tanto careces.

Desconectado bigleaguer

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 10
  • -Tu has recibido: 20
  • Mensajes: 64
  • Calificaciones: +20/-0
  • Sexo: Masculino
Re: is not avalid floating point value
« Respuesta #2: 29 de enero de 2011, 12:42:41 »
Tal como comenta Wilson, creo que tu problema es que tienes en el evento OnChange del TEdit un método para convertir de String a Float y seguramente estas usando la función StrToFloat la cuál genera un error si el string a convertir no es válido. Para solucionarlo usa la siguiente función en el evento OnChange StrToFloatDef(const S: String; const Default: Extended), donde Default es el valor numérico que retorna la función en caso de error. Ejm:
Código DELPHI
  1. procedure TForm1.Edit1Change(Sender: TObject);
  2. var
  3.   Monto: Double;
  4. begin    
  5.   Monto := StrToFloatDef(TEdit(Sender).Text, 0);
  6.   // Resto del código aqui...
  7. end;
  8.  

De está forma la función intenta convertir la cadena de texto a número y si por alguna razón falla (puede ser que el campo este en blanco, que la cadena contenga valores alfanuméricos, etc...), la función te retorna el parámetro Default, que en el ejemplo es 0.
Espero te sirva.
« Última Modificación: 29 de enero de 2011, 12:45:51 por bigleaguer »

Desconectado Kamael

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 0
  • -Tu has recibido: 0
  • Mensajes: 18
  • Calificaciones: +0/-0
Re: is not avalid floating point value
« Respuesta #3: 30 de enero de 2011, 11:08:41 »
Teniais razon. me funciona perfectamente. Tenia en el el evento onChange un metodp àra convertir a Float.
Muchas gracias y un saludo.

Desconectado Kamael

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 0
  • -Tu has recibido: 0
  • Mensajes: 18
  • Calificaciones: +0/-0
Re: is not avalid floating point value
« Respuesta #4: 30 de enero de 2011, 11:21:32 »
Ya de puestos, se podrian pasar todos los edits a float de una vez sin tener que convertirlos de uno en uno, para poder ejecutar operaciones matematicas con ellos?

Desconectado Wilson

  • Moderadores
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 597
  • -Tu has recibido: 262
  • Mensajes: 1,877
  • Calificaciones: +297/-0
  • Sexo: Masculino
Re: is not avalid floating point value
« Respuesta #5: 30 de enero de 2011, 11:26:23 »
Por supuesto que si, pero tienes que almacenar los valores float en algún lado que podría ser un array o no se si dispones de otra implementación.

Dinos a donde los quieres llevar y con gusto te decimos como se hace.
Dime de que tanto presumes y te diré de que tanto careces.

Desconectado Kamael

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 0
  • -Tu has recibido: 0
  • Mensajes: 18
  • Calificaciones: +0/-0
Re: is not avalid floating point value
« Respuesta #6: 30 de enero de 2011, 11:39:47 »
tengo digamos 30 edits donde se introducen los valores a operar. Me dices que tendria que almacenar esos valores en variables. estas variables podrian ser de tipo array.
El programa lo tengo hecho pero claro convirtiendo los edits a float uno por uno. Las operaciones matematicas se realizan con el evento onChange de los edits.

Desconectado Wilson

  • Moderadores
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 597
  • -Tu has recibido: 262
  • Mensajes: 1,877
  • Calificaciones: +297/-0
  • Sexo: Masculino
Re: is not avalid floating point value
« Respuesta #7: 30 de enero de 2011, 12:25:06 »
El programa lo tengo hecho pero claro convirtiendo los edits a float uno por uno.
Mi pregunta es cuando conviertes (así sea de uno en uno)  el valor de un TEdit a que lo asignas?

Por ejemplo :  LoQuePregunto := StrToFloat(Edit1.Text)
Dime de que tanto presumes y te diré de que tanto careces.

Desconectado Kamael

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 0
  • -Tu has recibido: 0
  • Mensajes: 18
  • Calificaciones: +0/-0
Re: is not avalid floating point value
« Respuesta #8: 30 de enero de 2011, 12:34:35 »
Esta es una parte del codigo que tengo hecho. Como veras es un poco liado


Código DELPHI
  1. TCf.Text := FloatToStr(StrToFloatDef(Cb1.Text,0)+StrToFloatDef(Cb2.Text,0)+
  2.                       StrToFloatDef(Cb05.Text,0)+StrToFloatDef(Cb02.Text,0)+StrToFloatDef(Cb01.Text,0)+
  3.                       StrToFloatDef(Cb5.Text,0)+StrToFloatDef(Cb10.Text,0)) ;

Desconectado Wilson

  • Moderadores
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 597
  • -Tu has recibido: 262
  • Mensajes: 1,877
  • Calificaciones: +297/-0
  • Sexo: Masculino
Re: is not avalid floating point value
« Respuesta #9: 30 de enero de 2011, 13:06:13 »
La verdad no entiendo para que los conviertes a float, si los vas a  vover a convertir a texto.

Recuerda que los valores que estén en los TEdit (independientemente de los procesos o conversiones que hagas con esos valores) siempre serán una cadena de texto.

Si lo que quieres es llevar el contenido de los TEdit a TCf.Text es suficiente con esto (dejando un espacio en blanco entre cada Edit :

Código DELPHI
  1. For i := 0 to ComponentCount -1 do
  2. if Components is TEdit then
  3. TCf.Text := TCf.Text + TEdit(Components).Text + ' ';
  4.  

Pero si quieres llevarlos en el orden que decribes, debes hacerlo a mano.

Sería conveniente tener una idea mas clara de que es lo que nesecitas hacer para poder colaborarte de una manera mas eficaz.

Saludos
« Última Modificación: 30 de enero de 2011, 14:01:17 por Wilson »
Dime de que tanto presumes y te diré de que tanto careces.

Desconectado bigleaguer

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 10
  • -Tu has recibido: 20
  • Mensajes: 64
  • Calificaciones: +20/-0
  • Sexo: Masculino
Re: is not avalid floating point value
« Respuesta #10: 30 de enero de 2011, 19:34:43 »
Presumo que lo que quieres es evitar escribir el siguiente código en cada uno de los eventos OnChange de los 30 Edits que tienes en tu form:
Código DELPHI
  1. TCf.Text := FloatToStr(StrToFloatDef(Cb1.Text,0)+StrToFloatDef(Cb2.Text,0)+
  2.   StrToFloatDef(Cb05.Text,0)+StrToFloatDef(Cb02.Text,0)+StrToFloatDef(Cb01.Text,0)+
  3.   StrToFloatDef(Cb5.Text,0)+StrToFloatDef(Cb10.Text,0)) ;
  4.  
De ser así, entonces lo que tienes que hacer es crear un método donde implementes tu código de conversión y calculos para después solo llamar a dicho método en cada uno de los Edits de tu form ó desde el IDE, asignar el mismo evento usado en el Edit a los demas.
« Última Modificación: 30 de enero de 2011, 19:57:09 por bigleaguer »

Desconectado Kamael

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 0
  • -Tu has recibido: 0
  • Mensajes: 18
  • Calificaciones: +0/-0
Re: is not avalid floating point value
« Respuesta #11: 31 de enero de 2011, 14:41:49 »
Los convierto a float para poder sumarlos y luego el resultado lo convierto a string para mostrarlo en el edit llamado Tcf, todo ello con el evento onChange en el resto de los edits.
Lo que  yo pretendo es sumar esos edits y mostrar el resultado en TCf, pero como ves lo que quiero es hacerlo sin tener que convertir los edits uno a uno.

Desconectado Wilson

  • Moderadores
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 597
  • -Tu has recibido: 262
  • Mensajes: 1,877
  • Calificaciones: +297/-0
  • Sexo: Masculino
Re: is not avalid floating point value
« Respuesta #12: 31 de enero de 2011, 18:15:09 »
Pon atención a lo que hay que hacer:

Selecciona todos los Tedits menos CTF y entonces en el Inspector de objetos ( con todos los Edits seleccionados) colocas la palabra "Sumar" en el evento OnChange y haces doble click (esto hará que todos los edits compartan el mismo procedimiento) y entonces coloca el siguiente código:

Código DELPHI
  1.  
  2. procedure TForm1.Sumar(Sender: TObject);
  3. var
  4.   i: integer;
  5.   Total: Double;
  6. begin
  7.   Total := 0;
  8.   For i := 0 to ComponentCount - 1 do
  9.     if Components is TEdit then
  10.       if not(TEdit(Components[I]).name = 'TCF') then
  11.       begin
  12.         Total := Total + StrToFloatDef(TEdit(Components[I]).Text, 0);
  13.         TCF.Text := FloatToStr(Total);
  14.       end;
  15. end;
  16.  
« Última Modificación: 05 de febrero de 2011, 16:05:07 por Wilson »
Dime de que tanto presumes y te diré de que tanto careces.

Desconectado Kamael

  • Usuario Activo
  • ***
  • Panel de agradecimientos
  • -Tu has dado: 0
  • -Tu has recibido: 0
  • Mensajes: 18
  • Calificaciones: +0/-0
Re: is not avalid floating point value
« Respuesta #13: 01 de febrero de 2011, 07:32:08 »
Gracias Wilson. He hecho lo que dices y funcina perfectamente.

Desconectado eduarcol

  • Administrador
  • ******
  • Panel de agradecimientos
  • -Tu has dado: 14
  • -Tu has recibido: 122
  • Mensajes: 3,920
  • Calificaciones: +154/-2
  • Sexo: Masculino
  • Rejodedor
Re: is not avalid floating point value
« Respuesta #14: 05 de febrero de 2011, 15:25:10 »
ok de ser asi, me atrevo a marcarlo como resuelto
...Yo naci en esta ribera del arauca vibrador
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela