Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   StrToFloat en Delphi 2010 y windows 7 (https://www.clubdelphi.com/foros/showthread.php?t=70252)

edgwin 09-10-2010 16:34:34

StrToFloat en Delphi 2010 y windows 7
 
Que tal amigos del foro.

Tengo un problema con la configuracion regional de windows 7.

La configuracion regional de windows 7 la tengo establecida como "Español Mexico" ahora, cuando ejecuto este codigo:

(Coloco un boton y una caja de texto sobre el formulario)

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  sf : string;
  f  : double;
begin
   sf := '40460.37028';
   f  := StrToFloat(sf);   ---> Aqui marca error.
end;

Lo curioso es que cuando cambio la configuracion regional a "Ingles (Estados Unidos)" se ejecuta sin problemas.

Repito, esto solo bajo Windows 7 (ignoro si en Windows vista tambien) ya que en Windows XP si funciona OK!

Alguien me puede ayudar!?

Saludos!

rgstuamigo 09-10-2010 17:46:59

Supongo que el error es precisamente por lo que estas mencionando,(la configuracion regional), y eso ocurre precisamente por que en algunas configuraciones regionales se trabaja como separador decimal con el punto ( . ) y en otras configuraciones se trabaja con el caracter coma ( , ), en todo caso lo corecto que veo es hacerlo así:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  sf : string;
  f  : double;
begin
   sf := '40460,37028';//<--He cambiado el punto ( . ) por coma ( , ) ;) 
   f  := StrToFloat(sf);//   ---> Aqui ya no te marcará un error ;) :D
end;
Espero te sea de utilidad.:)
Saludos...:)

edgwin 09-10-2010 21:26:28

Gracias rgstuamigo por tu respuesta.

Me serviria si el dato de "sf" es constante pero desafortunadamente en el codigo real, viene de un "IdClient.IOHandler.ReadLn()", es decir, el dato lo manda el servidor y en el servidor la configuracion regional esta en "Español (mexico)".

Lo resolvi, pero estoy casi seguro que va a volver a pasar:

1) Cambie la configuracion regional a "Ingles (EUA)"
2) Corri el programa, antes de ejecutar el proceso donde marca el error, volvi a cambiar la configuracion regional a Español (Mexico).
3) Corri el proceso y ya no me marco el error.
4) Cerre el programa y volvi a correrlo, ejecute el proceso que marcabaa error y ya no lo hizo.

Saludos!

ecfisa 09-10-2010 21:45:51

Hola edgwin.

Podrías probar así:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  sf : string;
  f  : double;
begin
  DecimalSeparator:= '.';  // o para coma: ','
  sf := '40460.37028';
  f  := StrToFloat(sf);
end;

Si no querés que quede alterada la configuración decimal para el resto del programa:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  sf : string;
  f  : double;
  aux: char;
begin
  aux:= DecimalSeparator;
  DecimalSeparator:= '.';
  sf := '40460.37028';
  f  := StrToFloat(sf);
  DecimalSeparator:= aux;
end;

Saludos. :)

edgwin 09-10-2010 21:52:31

Gracias por la resupuesta.

Lo voy a probar el lunes, ahorita voy de salida. Le comentare los resultados.

Saludos!

ContraVeneno 11-10-2010 18:32:38

solo por si las dudas:
http://www.clubdelphi.com/foros/showthread.php?t=65534


La franja horaria es GMT +2. Ahora son las 10:01:16.

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