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 ));
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.