PDA

Ver la Versión Completa : Hacer operación matemática con un Label con formatfloat


esublim
28-12-2022, 00:03:39
tengo una consulta espero me puedan ayudar.


tengo un label donde los totales se muestran de la siguiente manea:

Principal.sub_t.Text:= FloatToStrF( total_fdesc, ffNumber, 8, 2 );
eso me arroja por ejemplo el numero 1.214,15
necesito que se muestre asi tan cual esta con las comas (,) y puntos (.). hasta aqui todo excelente.

el problema esta que cuando quiero tomar el label y usarlo para una operacion me dice que no es un valor float.
quiero poder usar el label en una operacion o simplemente mostra el contenido de ese lavel solo con la coma(,) en otro label sin dejar de mostrarlo asi como esta.

en otras palabras necesito tomar esto 1.214,15 y convertirlo en 1214,15 para usarlo en una operacion. tomandolo del label

pgranados
28-12-2022, 00:20:05
tengo una consulta espero me puedan ayudar.
el problema esta que cuando quiero tomar el label y usarlo para una operacion me dice que no es un valor float.
l

Ok, esta parte esta fallándote porque estas tomando un valor string para realizar operaciones matemáticas.


Principal.sub_t.Text:= FloatToStrF( total_fdesc, ffNumber, 8, 2 );

Deberías de utilizar StrToFloat()

http://www.delphibasics.co.uk/RTL.php?Name=strtofloat

Saludos :rolleyes:

esublim
28-12-2022, 00:29:22
hola este codigo lo necesito:
Principal.sub_t.Text:= FloatToStrF( total_fdesc, ffNumber, 8, 2 );

para mostrar los valores de la siguiente manera 12.315,10


el problema no es ese. por que SI necesito mostrarlo de esa manera con el punto y la coma.

el problema es que despues no encuentro la manera de volverlo a usar convirtiendolo es 12315,10 y podelo usar en una operacion matematica.
en eso es que necesito ayuda.

pgranados
28-12-2022, 00:34:58
Para quitarle el formato debes de tener tu valor en float y utilizar TFloatFormat.

Revisa la siguiente info:
http://www.delphibasics.co.uk/RTL.php?Name=TFloatFormat

esublim
28-12-2022, 00:49:31
quedo igual con el mismo error
Principal.sub_t.Text:= FloatToStrF( total_fdesc, ffNumber, 8, 2 );

como hago para poner a Principal.sub_t.Text como float?

resultadobs:=strtofloat(Principal.sub_t.Text);
ShowMessage('Number 6,0 = '+FloatToStrF(resultadobs, ffNumber, 6, 0));
me sigue diciendo que Principal.sub_t.Text no es un numero float

esublim
28-12-2022, 01:06:16
bueno no se sie es la manera correcta pero solucione asi:

str:= StringReplace(totalbs.Text, '.', '', [rfReplaceAll, rfIgnoreCase]);
resultadobs:= strtofloat(str);
rest_bs.Text:= floattostr(resultadobs-f)

Neftali [Germán.Estévez]
28-12-2022, 09:17:06
Port favor [esublim] revisa la Guía de estilo de los foros (https://www.clubdelphi.com/foros/guiaestilo.php) y utiliza TAG's cuando añadas código (https://www.clubdelphi.com/images/UtilizarTAGs.png) a los mensajes.

kuan-yiu
28-12-2022, 09:20:54
Estás mostrando un float en una label, o sea como texto (dejó de ser un float), lo que puedes decidir es el formato de representación de ese float.
La función FloatToStrF tiene varios formatos de representación, pero si ninguno de ellos se ajusta a lo que necesitas puedes hacerlo tú directamente.

Te sugiero usar otro componente para mostrar el dato que te permita un mayor control.
Yo te recomiendo un tCurrencyEdit que tiene una propiedad value por la que accedes directamente al dato como float y una propiedad displayFormat con la que defines el aspecto visual (separador decimal, de millar, signo, moneda...)

duilioisola
28-12-2022, 10:02:11
Yo lo que te recomiendo es tener siempre disponible el valor en formato Float.
Luego lo utilizas en el label y en el calculo partiendo de el.


unit UEjemplo

interfase

uses ...

type
TFMEjemplo = class(TForm)
[...]
private
Total : double;
[...]
end;

[...]

procedure TFMEjemplo.Create();
begin
Total := 0;
end;

procedure TFMEjemplo.CalculaTotal;
begin
Total := ObtenerTotal();
end;

procedure TFMEjemplo.MuestraTotal;
begin
sub_t.Text:= FloatToStrF( Total , ffNumber, 8, 2 );
end;

function TFMEjemplo.DevuelveDobleDeTotal : double;
begin
Result := Total * 2;
end;

escafandra
28-12-2022, 22:14:02
Lo ideal es que manejes el número or un lado y su representación por otro. Es tal cual te expone [duilioisola].
Si por algún motivo necesitas convertir de texto a número tendrás que eluminar el formato. para tu caso mira este código que hace ambas cosas:



var
F1, F2: Extended;
S1, S2: String;
begin
F1:= 1214.15;
S1:= FloatToStrF(F1, ffNumber, 8, 2 ); // Muestra 1.214,15
S2:= StringReplace(S1, '.', '', [rfReplaceAll]); // Ahora 1214,15
F2:= StrToFloat(S2); // F2 = 1214.15
end;





Saludos.