Ir al contenido


Foto

[RESUELTO] is not avalid floating point value


  • Por favor identifícate para responder
14 respuestas en este tema

#1 Kamael

Kamael

    Member

  • Miembros
  • PipPip
  • 18 mensajes

Escrito 29 enero 2011 - 10:10

al intentar limpiar un numero determinado de edits con este codigo :


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.
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 29 enero 2011 - 11:27

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:



delphi
  1. if edit.text <> '' then
  2. begin
  3. //aqui el procedimiento que convierte de string a Float
  4. end;


  • 0

#3 bigleaguer

bigleaguer

    Advanced Member

  • Miembros
  • PipPipPip
  • 66 mensajes

Escrito 29 enero 2011 - 12:42

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:


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;


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.
  • 0

#4 Kamael

Kamael

    Member

  • Miembros
  • PipPip
  • 18 mensajes

Escrito 30 enero 2011 - 11:08

Teniais razon. me funciona perfectamente. Tenia en el el evento onChange un metodp àra convertir a Float.
Muchas gracias y un saludo.
  • 0

#5 Kamael

Kamael

    Member

  • Miembros
  • PipPip
  • 18 mensajes

Escrito 30 enero 2011 - 11:21

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?
  • 0

#6 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 30 enero 2011 - 11:26

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.

  • 0

#7 Kamael

Kamael

    Member

  • Miembros
  • PipPip
  • 18 mensajes

Escrito 30 enero 2011 - 11:39

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.
  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 30 enero 2011 - 12:25

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)
  • 0

#9 Kamael

Kamael

    Member

  • Miembros
  • PipPip
  • 18 mensajes

Escrito 30 enero 2011 - 12:34

Esta es una parte del codigo que tengo hecho. Como veras es un poco liado




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


  • 0

#10 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 30 enero 2011 - 01:06

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 :



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



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
  • 0

#11 bigleaguer

bigleaguer

    Advanced Member

  • Miembros
  • PipPipPip
  • 66 mensajes

Escrito 30 enero 2011 - 07:34

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:


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


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.
  • 0

#12 Kamael

Kamael

    Member

  • Miembros
  • PipPip
  • 18 mensajes

Escrito 31 enero 2011 - 02:41

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.

  • 0

#13 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 31 enero 2011 - 06:15

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:



delphi
  1. procedure TForm1.Sumar(Sender: TObject);
  2. var
  3.   i: integer;
  4.   Total: Double;
  5. begin
  6.   Total := 0;
  7.   For i := 0 to ComponentCount - 1 do
  8.     if Components is TEdit then
  9.       if not(TEdit(Components[I]).name = 'TCF') then
  10.       begin
  11.         Total := Total + StrToFloatDef(TEdit(Components[I]).Text, 0);
  12.         TCF.Text := FloatToStr(Total);
  13.       end;
  14. end;


  • 0

#14 Kamael

Kamael

    Member

  • Miembros
  • PipPip
  • 18 mensajes

Escrito 01 febrero 2011 - 07:32

Gracias Wilson. He hecho lo que dices y funcina perfectamente.

  • 0

#15 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 05 febrero 2011 - 03:25

ok de ser asi, me atrevo a marcarlo como resuelto
  • 0




IP.Board spam blocked by CleanTalk.