Ir al contenido


Foto

StrToFloat en Delphi 2010 y windows 7


  • Por favor identifícate para responder
8 respuestas en este tema

#1 edgwin

edgwin

    Member

  • Miembros
  • PipPip
  • 30 mensajes
  • LocationMexico

Escrito 09 octubre 2010 - 08:32

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)



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   sf : string;
  4.   f  : double;
  5. begin
  6.   sf := '40460.37028';
  7.   f  := StrToFloat(sf);  ---> Aqui marca error.
  8. 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!
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 09 octubre 2010 - 09:27

A mi me parece un bug de Windows7, lo que me percaté es que al seleccionar Español (México) toma la configuración de Español (España), es cosa de ir probando otras configuraciones, no tengo a la mano Windows7 pero yo cambiaría a Español (España) a ver si está invertida la configuración, la otra es buscar alguna configuración en español entre todas las que existen y ver cual es la que le gusta.

Claro, esto mientras los de MS sacan su próximo upodate o Service Pack con la corrección.

Salud OS

  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 09 octubre 2010 - 10:10

Saludos.

Prueba esta función TryStrToFloat y postea los resultados.
  • 0

#4 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 09 octubre 2010 - 12:06

Buenas,

Para evitarte problemas de versiones de Windows o configuraciones regionales, un buen costumbre es establecer tú mismo el separador decimal y de millares con DecimalSeparator y ThousandSeparator.

Recuerda dejarlos como estaban una vez hecha la transformación ;)

Nos leemos

  • 0

#5 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 09 octubre 2010 - 01:32

declaralo como extend, en lugar de double..


Var
f: extend;


  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 09 octubre 2010 - 06:28

declaralo como extend, en lugar de double..


Var
f: extend;


Puedo preguntar: ¿Y de que sirve cambiar a Extended?
El tipo Double por regla general basta y sobra. Además, es el uso de Extended el que hay que evitar a toda costa.
Yo al menos no veo en el ejemplo que haya algún impedimento del uso de Double... dicho número tiene 10 sifras significativas y Double da hasta para 15/16.

El problema radica en la configuración regional que se está utilizando y Fernando ha comentado la solución más efectiva: hacer uso de las variables globales DecimalSeparator y ThousandSeparator.
Lo que me llama la atención de la respuesta de Fernando es que comenta que debe volverse a su valor anterior.Tengo entendido que no es necesario, porque este cambio no afecta de forma externa a la aplicación ya que no modifica la configuración regional, sino que se hace de forma local (al ejecutable):

A menos que sea necesario, además, de operar en otro sistema, no veo el porqué volver a su valor anterior.


  • 0

#7 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 10 octubre 2010 - 12:32

Buenas,


declaralo como extend, en lugar de double..


Var
f: extend;


Puedo preguntar: ¿Y de que sirve cambiar a Extended?
El tipo Double por regla general basta y sobra. Además, es el uso de Extended el que hay que evitar a toda costa.
Yo al menos no veo en el ejemplo que haya algún impedimento del uso de Double... dicho número tiene 10 sifras significativas y Double da hasta para 15/16.

El problema radica en la configuración regional que se está utilizando y Fernando ha comentado la solución más efectiva: hacer uso de las variables globales DecimalSeparator y ThousandSeparator.
Lo que me llama la atención de la respuesta de Fernando es que comenta que debe volverse a su valor anterior.Tengo entendido que no es necesario, porque este cambio no afecta de forma externa a la aplicación ya que no modifica la configuración regional, sino que se hace de forma local (al ejecutable):

A menos que sea necesario, además, de operar en otro sistema, no veo el porqué volver a su valor anterior.


Estoy de acuerdo con Delphius, el tipo de dato usado no tiene nada que ver.

Por otro lado, como por Fernando creo que se refiere a mi (soy Xavi :D), responderle a lo de volver al valor original. La verdad no sabría decirte por qué lo hago, pero siempre lo he hecho. Quizás en versiones anteriores de Delphi (D3 o D4 o así) tuve problemas con eso y por eso lo hago, no sabría decirte :D

En fin, que si no es necesario, no hace falta que se vuelva a su origen jejejeje

Nos leemos

  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 10 octubre 2010 - 09:19


Por otro lado, como por Fernando creo que se refiere a mi (soy Xavi
:D),

Hola,

Perdón con confundirte Xavier.  :D
Juraría haber leído enecumene. El sueño y las horas me jugó una de esas...  :p

La verdad no sabría decirte por qué lo hago, pero siempre lo he hecho. Quizás en versiones anteriores de Delphi (D3 o D4 o así) tuve problemas con eso y por eso lo hago, no sabría decirte :D

En fin, que si no es necesario, no hace falta que se vuelva a su origen jejejeje

Nos leemos

Pues yo al menos no tuve problemas cambiando las variables. Si se está en duda si afecta a la configuración regional basta con ir a panel de control y fijarse. ;)

Por lo menos en la ayuda no indica algo por el estilo.

Saludos,
  • 0

#9 pgietz

pgietz

    Newbie

  • Miembros
  • Pip
  • 2 mensajes

Escrito 13 octubre 2010 - 07:27

En Argentina el separador decimal es la coma, anda perfecto si lleva coma.




delphi
  1. var
  2.   sf : string;
  3.   f  : double;
  4. begin
  5.   sf := '40460,37028';
  6.   f  := StrToFloat(sf); 


  • 0




IP.Board spam blocked by CleanTalk.