Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   edit Str a float (https://www.clubdelphi.com/foros/showthread.php?t=66823)

Kamael 13-03-2010 17:45:54

edit Str a float
 
Tengo varios edit y quiero pasarlos de sTr a float sin tener que hacerlo de uno en uno.
el numero de edit es superior a 30. Se que se puede hacer, de hecho lo hice, pero ya no me acuerdo.
Me podeis ayudar?.

BrunoBsso 13-03-2010 19:34:25

Hola.
Sí o sí vas a tener que hacerlos uno por uno.
Podrías hacer un casting como
Código Delphi [-]
var
  I:Integer;
  F:Real;
for I:=0 to FormAlgo.ControlCount-1 do begin
  if (FormAlgo.Controls[i] is TEdit) then
    F:=StrToFloat(TEdit(FormAlgo.Controls[i]).Text);
end;

Kamael 16-03-2010 21:56:33

perdon por mi tardanza en responder.
el codigo que me mandaste no no funciona, pues ala sumar dos edit y reflejarlo en el tercero en vez de sumar lo que me hace es añadir un numero al otro.
Cita:

Edit3.text := edit1.text +Edit2.Text ;

roman 16-03-2010 22:06:41

Pero, ¿en qué parte del código viste tú algo como lo que ahora pones? :confused:

Lo que está haciendo es recorrer la lista de Edits; en cada paso convierte el valor del edit actual en un número flotante y el resultado lo suma a una variable real.

Lo único que veo es que la línea:

Código Delphi [-]
F:=StrToFloat(TEdit(FormAlgo.Controls[i]).Text);

creo que deberia ser:

Código Delphi [-]
F:=F+StrToFloat(TEdit(FormAlgo.Controls[i]).Text);

pero por lo demás el código debería funcionar.

// Saludos

ecfisa 17-03-2010 02:41:11

Hola kamael.

Viendo el último código que enviaste, creo que tienes un error conceptual.

Cuando realizas la asignacion:
Edit3.Text := Edit1.Text + Edit2.Text;

Aunque allí hayan almacenados dígitos numéricos, estos siempre serán tratados como caracteres.

Sumar los caracteres '1' + '2' y esperar como resultado el número 3, carece de sentido, lo que obtendrás será '12' como una cadena de caracteres y eso es lo lógico.

Saludos.

BrunoBsso 17-03-2010 11:45:21

A ver, el código que te hice yo era para que veas como almacenar un número real de un TEdit en una variable de tipo real.
Si vos precisás transformar dos TEdits en real y mostrarlo en otro deberías hacer así
Código Delphi [-]
Edit3.Text:=FloatToStr(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Text))
O más expandido (pero mismo resultado)
Código Delphi [-]
//Usando 3 variables de tipo Real
F1:=StrToFloat(Edit1.Text);
F2:=StrToFloat(Edit2.Text);
F3:=F1+F2;
Edit3.Text:=FloatToStr(F3);
Yo al principio no sabía que querías sumarlas y mostrarlo en otor edit.
Vos con Edit3.Text := Edit1.Text + Edit2.Text; estás concatenando 2 TEdits en Edit3
Saludos.

Kamael 21-03-2010 20:56:42

Ya veo que me explique mal. Perdón por ello.
Lo que quiero es sumar el contenido de dos edit y mostrarlo en un tercero.
Pero el problema es que no son solo tres edit, sinó que son unos veinte. entonces para evitarme crear veinte variables y asignarlas a cada una independientemente quiero hacerlo todos a la vez., y asi ahorrarme un monton de codigo.
Gracias a todos ppor preocupar y perdonad mi demora en responderos. No he estado en casa estos dias.(de Fallas en Valencia).
Un saludo

BrunoBsso 21-03-2010 22:29:53

Bueno, acá te dejo una solución así lo aprendés y podés implementarlo.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  I:Integer;
  F:Real;
begin
  //Tomar en cuenta que el separador decimal (DecimalSeparator) puede ser . o ,
  F:=0;
  for I := 0 to ControlCount-1 do begin
    if (Controls[i] is TEdit) then begin
      if TEdit(Controls[i]).Tag<>1 then
        F:=F+StrToFloat(TEdit(Controls[i]).Text);
    end;
  end;
  EdResultado.Text:=FloatToStr(F);
end;
Para ese código usé 4 TEdits llamados EdSuma1, EdSuma2, EdSuma3 y EdSuma4, un botón Button1 y un TEdit EdResultado.
La propiedad Tag de los TEdits de sumas la dejé en 0 y la de EdResultado la dejé en 1 para encontrarlo fácil.
Tenés que tener en cuenta que el DecimalSeparator depende del lenguaje del SO.
Podés detectar cuando se escribe una coma o un punto y decidir vos qué caracter tiene que ser, pero eso ya es aparte de lo que necesitás.
Saludos!


La franja horaria es GMT +2. Ahora son las 11:03:14.

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