PDA

Ver la Versión Completa : problema con decimales largos


darkbits
23-06-2015, 21:26:22
un saludo al todo club

tengo un problema grande con decimales grandes
realizo esta operación donde esta celda tiene como valor 1.200,00

var restar:real;

resta2:=strtofloat(StringGrid1.Cells[6,stringGrid1.Row]);

y cuando pasa por esa linea me arroja este mensaje
Proyect chop.exe raised exception class EconvertError with message "1.200,00" is no valid floatng point value

con valores < 999,00 funciona perfectamente

el problema es cuando el decimal es > 1.000,00

porfavor me ayudan a solucionar

ralf8727
23-06-2015, 21:35:27
el problema es que 1.200,00 no es float es un numero compuesto estas separando los miles con un .(punto) tienes que poner los miles juntos osea 1200.00 como es que pasas el 1.200,00 al string

darkbits
23-06-2015, 22:02:00
como lo convierto 1.200,00 a 1200,00 ?

ralf8727
23-06-2015, 22:07:34
como lo convierto 1.200,00 a 1200,00 ?


como llenas el StringGrid1

darkbits
23-06-2015, 22:15:55
por tema de estética lo lleno así:


StringGrid1.Cells[6,StringGrid1.Tag] := FormatFloat('#,##0.00',strtofloat(ventaBs.text)); // 1.200,00


esos 1.200,00 quiero multiplicar con otro valor entero.
y ahi se me presenta el problema mencionado arriba.

como lo convierto 1200,00 ?

ralf8727
23-06-2015, 22:23:56
var
restar:real;
s:string;
begin
// S :=StringGrid1.Cells[6,stringGrid1.Row];

s:=edit1.Text;
while Pos('.', S) > 0 do
begin
Delete(S, Pos('.', S),1);
s:=s;//strtofloat(S);
end;

s := StringReplace(s, ',', '.',[rfReplaceAll, rfIgnoreCase]);

Label1.Caption:=s;

Label2.Caption:= FloatToStr( StrToFloat(s)-100);


end;


esete codigo te podria funcionar pero si estas tomando informacion de un edit puedes poner el valor como se requiere.

ecfisa
23-06-2015, 22:25:32
Hola darkbits.

Otra opción:

var
resta: Single;
begin
resta := StrToFloat(StringReplace(StringGrid1.Cells[6,stringGrid1.Row] ,ThousandSeparator, '', [rfReplaceAll]));
...


Saludos :)

darkbits
24-06-2015, 00:13:51
que es ?

ThousandSeparator

AgustinOrtu
24-06-2015, 00:17:49
Por responder desde el teléfono no tengo delphi a mano para probar, pero no se puede indicar el formato en la función StrToFloat?

Yo uso StrToCurr pasando formato de moneda y no tuve nunca problemas con en punto. Por lo menos anda bien en windows xp, 7, server 2008 y windows 10 preview, usando delphi 2010

AgustinOrtu
24-06-2015, 00:20:50
que es ?

ThousandSeparator


Separador de miles. Ejemplo si ThousandSeparator es '.'

1.200 > mil doscientos

Si fuera ','

1,200 > también mil doscientos

Si esta en blanco

1200 > mil doscientos

Tanto ese separador como el DecimalSeparator van de la mano digamos

Podes modificarlos desde delphi sin problema

nlsgarcia
24-06-2015, 01:01:39
darkbits,


...¿Que es ThousandSeparator?...

:rolleyes:

Revisa esta información:

1- ThousandSeparator (http://www.delphibasics.co.uk/RTL.asp?Name=ThousandSeparator)

2- DecimalSeparator (http://www.delphibasics.co.uk/RTL.asp?Name=DecimalSeparator)
Espero sea útil :)

Nelson.

ralf8727
24-06-2015, 01:21:36
Por responder desde el teléfono no tengo delphi a mano para probar, pero no se puede indicar el formato en la función StrToFloat?

Yo uso StrToCurr pasando formato de moneda y no tuve nunca problemas con en punto. Por lo menos anda bien en windows xp, 7, server 2008 y windows 10 preview, usando delphi 2010


no lo puedes convertir directamente porque tiene dos caracteres separadores el punto y la coma o por lo menos no directamente.

o a menos que lo este intentando mal?

edit1.Text:='1.200,00';
Label1.Caption:=CurrToStr(StrToCurr(Edit1.Text ));