Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-03-2018
Jcg-Guirola Jcg-Guirola is offline
Miembro
 
Registrado: May 2017
Posts: 15
Poder: 0
Jcg-Guirola Va por buen camino
Problemas con puntos y comas

Hola, tengo un problemón resulta que estoy haciendo un software que realiza una serie de cálculos hidráulicos y utiliza muchos stringgrid y edit con números para realizar estos cálculos, todos los datos y resultados (de 18 forms hasta ahora) lo puedo guardar en archivos y luego cargarlos al programa en cualquier momento, el problema es que reinstalé la máquina y después de esto ahora resulta que mi pc no reconoce como real numeros con coma(6,8 por ejemplo) sino que calcula con punto(6.8) entonces cuando cargo la información a los form me los carga con coma y no con puntos y no puedo calcular, no sabía que esto podía pasar y hasta ahora en todas las pc donde lo he probado trabajan coma, lo que necesito es buscar una forma de normalizar esto para que siempre sea con coma o punto en cualquier pc(preferentemente coma) espero haberme explicado
Responder Con Cita
  #2  
Antiguo 05-03-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Bogotá, Colombia
Posts: 732
Poder: 16
gatosoft Va camino a la fama
Una forma es modificar el registro global FormatSettings al inicar tu aplicaciòn para que siempre tome la coma como separador decimal...

asi:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  FormatSettings.DecimalSeparator:=',';
end;

Pero debes tener en cuenta que estas almacenando tus datos en archivos en forma de texto (supongo).. asi que siempre deberas tener cuidado como lo lees y como lo guardas...

otra opcion es la de utilizar un registro formatsettings personalizado para hacer tus conversiones.

asumamos por ejemplo que tienes tus datos almacenados con un separador decimal igual a símbolo "Arroba".. los debes leer y trabajarlos en pantalla con el separador decimal de la màquina...

y cuando los guardes los debes guardar en otro archivo que tiene otro separado decimal, por ejemplo el signo "dolar"


Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var Texto: String;
    Valor: Double;
    MyFX: TformatSettings;
begin
  Texto:='45@23'; //este es el dato que lees de tu archivo 1
  MyFX.DecimalSeparator:='@';  //defines la arroba como tu separador decimal personalizado
  Valor:= StrToFloat(Texto, MyFX); //conviertes el texto (con la arroba en un numero real

  Edit1.Text:= FloatToStr(Valor); //muestras el numero en pantalla. Se verá con el separador decimal de la maquina

  Valor:= StrToFloat(Edit1.Text); // despues de modificado, conviertes el texto en numero nuevamente
  MyFX.DecimalSeparator:='$'; // defiens el separador decimal de salida
  Texto:= FloatToStr(Valor, MyFX); // conviertes el numero a texto con el nuevo separador decimal

  Edit2.Text:= texto; // guardas o muestras el numero convertido a texto

end;

Espero haber sido claro
__________________
gatosoft [M.40.co]
Responder Con Cita
  #3  
Antiguo 05-03-2018
Jcg-Guirola Jcg-Guirola is offline
Miembro
 
Registrado: May 2017
Posts: 15
Poder: 0
Jcg-Guirola Va por buen camino
Muy Claro muchas gracias pruebo y te digo
Responder Con Cita
  #4  
Antiguo 06-03-2018
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: Aug 2007
Ubicación: Barcelona, España
Posts: 1.494
Poder: 13
duilioisola Tiene un aura espectacularduilioisola Tiene un aura espectacular
Otra explicación, también muy clara, pero en inglés.
5 Minute Snack: Reading floats with StrToFloat and TFormatSettings independent of system region settings

Quizás deberías hacer un par de funciones para leer y escribir números.
Los número que guardes en el fichero deberán tener siempre el mismo formato, ya que de lo contrario no podrás compartir ese fichero entre ordenadores con diferente configuración.
Los números que muestres deben seguir la configuración del ordenador.
Responder Con Cita
  #5  
Antiguo 07-03-2018
Jcg-Guirola Jcg-Guirola is offline
Miembro
 
Registrado: May 2017
Posts: 15
Poder: 0
Jcg-Guirola Va por buen camino
Disculpen la demora pero es que tuve problema con internet, al configurar el software a trabajar con ¨,¨ me fue suficiente y se que me podrán decir que debo respetar la configuración regional y utilizar ¨,¨ o ¨ .¨ pero es que debo utilizar ¨,¨ porque pienso utilizar números separados por puntos para una funcionalidad(que aún no me he decidido) que quizas le agregarle al programa.Como siempre Gran ayuda.
Se me olvidaba tube que hacer una pequeña modificación
Cita:
procedure TForm1.FormCreate(Sender: TObject);
begin
DecimalSeparator:=','; //Eliminé FormatSettings porque me daba error
end;
Y como condiciono al programa a trabajor con ¨,¨los archibos que guardo me funcionan para cualquier configuración regional
Responder Con Cita
  #6  
Antiguo 08-03-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Bogotá, Colombia
Posts: 732
Poder: 16
gatosoft Va camino a la fama
Cita:
Empezado por Jcg-Guirola Ver Mensaje
Eliminé FormatSettings porque me daba errorl
En versiones antiguas de Delphi se usan variables globales como "DecimalSeparator"... pero embarcadero decidió poner orden (*) a ésto y encapsular dichas variables en un registro global de tipo TFormatSettings... así mismo modificó funciones como DateToStr y FloattoStr para que aceptaran un registro de éste tipo como indique anteriormente

(*) Menciono lo de poner orden, porque se sabe que el uso de variables globales... sueltas por ahí en unidades no es una buena práctica..

saludo,
__________________
gatosoft [M.40.co]
Responder Con Cita
  #7  
Antiguo 08-03-2018
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
 
Registrado: Aug 2013
Ubicación: Argentina
Posts: 1.858
Poder: 9
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo aconsejo siempre lo mismo que comenta [gatosoft]: usar un TFormatSettings propio. Tiene la gran ventaja de que si algun dia se necesita paralelizar, te ahorras el quebradero de cabeza de actualizar todas las llamadas a las funciones de formato, ya que el registro TFormatSettings global no es thread-safe.

De todos modos, considera llevarlo un poquito mas alla y crear tus propias clases/funciones para formatear, de esta manera es muy claro que se esta formateando, con que parametros, y permite modificar la configuracion de todo el programa sin tener que andar buscando referencias desparramadas por todo el codigo. Es algo que no cuesta nada de nada implementar y el dia de mañana lo agradeceras
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
puntos y comas - decimales Duc API de Windows 7 16-01-2008 17:40:15
comas por puntos pruz API de Windows 4 05-07-2005 22:59:24
Comas o Puntos pruz Varios 1 13-08-2004 20:18:42
Problemas con puntos y comas... Access delphicano Varios 2 30-12-2003 15:07:54
comas decimales por puntos Carmelo8 Varios 5 28-11-2003 01:45:23


La franja horaria es GMT +2. Ahora son las 04:18:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi