PDA

Ver la Versión Completa : is not a valid floating point


angelratza
20-06-2017, 20:26:29
Aquí de nuevo yo preguntando, tal vez sea algo trivial pero no encuentro la causa de este error y quisiera me apoyaran a verificar que lo pudiera estar generando, ya que no me acepta cantidades numéricas en miles.

Estoy capturando los datos desde un TStringGrid, pero estos al ser en miles me arroja el error de " '{cantidad en miles}' is not a valid floating point ".

Les dejo la parte del código en donde se presenta el error. :confused:


importdesc:=StrToFloat(Fventa.SGVenta.Cells[6,Fventa.SGVenta.Row]); // Se toma el valor desde la columna 6 que corresponde al importe en miles
importd:=FormatFloat('#,##0.00',importdesc); // Le trato de aplicar el formato pero AQUÍ ES DONDE MARCA EL ERROR.

// si la cantidad no es en miles realiza el codigo que sigue mas abajo sin problemas pero si no el programa se detiene por causa del error descrito

if idesc <> 0 then
begin
Desc:=1-idesc/100; //a 1 se resta el porcentaje de descuento para q Desc se multiplique por la cantidad
import:=importdesc*Desc;
Fventa.SGVenta.Cells[5,Fventa.SGVenta.Row]:= IntToStr(idesc); //Descuento
end;

import2:=FormatFloat('#,##0.00',import);
Fventa.SGVenta.Cells[6,Fventa.SGVenta.Row]:= import2; //Importe con descuento aplicado


Quedo atento de sus comentarios, y agradezco el apoyo que brindan en este foro que siempre es de mucha ayuda. :D^\||/

oscarac
20-06-2017, 22:26:59
te has fijado en la configuracion regional?

angelratza
20-06-2017, 23:00:22
Gracias por preguntar y ya quedo resuelto, pues leyendo algunos post relacionados de este foro encontré el siguiente:

www.clubdelphi.com/foros/showthread.php?p=123448#post123448

En donde menciona una solución que me ha funcionado de maravilla.

Verán resulta que cuando yo tomaba el String con el valor numérico este contenía el valor decimal completo: p/e = "45,000.00"; lo cual al pasarlo a un valor FLOAT era invalido y arrojaba el error.

Lo único que hice fue crear una función que elimine los puntos decimales para evitar el error y posterior darle formato nuevamente para su uso en el programa.



function QuitaEn(Cadena, Esto: String): String;
var
aPos: Integer;
begin
aPos := Pos(Esto, Cadena);
Result:= '';
while (aPos > 0) do begin
Result := Result + Copy(Cadena, 1, aPos-1);
Delete(Cadena, 1, aPos + Length(Esto)-1);
aPos := Pos(Esto, Cadena);
end;
Result := Result+Cadena;
end;

importdesc:=StrToFloat(QuitaEn(Fventa.SGVenta.Cells[6,Fventa.SGVenta.Row], ',')); // Quitamos los valores decimales para evitar el error
importd:=FormatFloat('#,##0.00',importdesc); // Se le vuelve a dar el formato correcto



:D^\||/