Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-06-2012
elcopa elcopa is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 10
Poder: 0
elcopa Va por buen camino
Asignacion en variable double perdida

Buenas tardes.
Tengo una funcion StrToDouble que funciona y ha funcionado por mucho tiempo. Con esta funcion convierto un valor obtenido de un grid y la asigno a una variable de tipo double, pero resulta que hemos visto que la variable queda con un 0 mientras que la funcion si ha devuelto el valor correspondiente.
Para afirmar lo anterior he puesto un Showmessage donde convierto el resultado de esa funcion a string y muestro en pantalla, pero si el resultado lo pongo en una variable me deja valor 0.
Ejemplo

Código Delphi [-]
variable 
   cantidad   : Double;

begin
    Cantidad   :=StrToDouble(grid.cells[1,1]);   //el grid trae:______5.2   , 
    ShowMessage(FloatToStr(StrToDouble(grid.cells[1,1]));   //muestra el 5.2
    Cantidad   :=Cantidad; //breakpoint.... muestra cantidad como 0......  
End;

Esto me esta sucediendo con Dlephi 7 (y a un compa le paso en 2010) y no puedo migrar a Delphi 2010 porque requeriria cirugia mayor.... meses de migracion por los componentes que ya tengo establecidos en delphi 7.

Agradezco la ayuda q me puedan brindar con el tema.


Saludos.

Última edición por Casimiro Notevi fecha: 28-06-2012 a las 22:34:12.
Responder Con Cita
  #2  
Antiguo 28-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #3  
Antiguo 28-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Código Delphi [-]
ShowMessage( grid.cells[1,1] );

Y así, ¿que mensaje sale?
Responder Con Cita
  #4  
Antiguo 28-06-2012
elcopa elcopa is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 10
Poder: 0
elcopa Va por buen camino
Seguimiento

Al mostrar los valores del grid en mensaje o debugueando salen bien. Es solo con esa variable que se pierden.
Son variables locales de la función. Este problema me ha pasado en distintas ocasiones, tanto en delphi 7 como en 2010. No se si tiene que ver con el windows 7 64B, o alguna configuracion del delphi.

La funcion StrToDouble se usa en MUCHAS partes, todo el sistema de alrededor de 1.7M de lineas usa esta funcion para las conversiones, es una variacion del StrToFloat.
Responder Con Cita
  #5  
Antiguo 28-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Prueba esto...:

Código Delphi [-]
variable     
  cantidad   : Double;  
begin     
  Cantidad   :=StrToDouble(grid.cells[1,1]);   //el grid trae:______5.2   ,      
  ShowMessage(FloatToStr(StrToDouble(grid.cells[1,1]));   //muestra el 5.2     
  Cantidad   :=Cantidad; //breakpoint.... muestra cantidad como 0......  
  //
  showmessage(floattostr(cantidad));   // Añade esto y prueba  <----------------
  // 
End;
Responder Con Cita
  #6  
Antiguo 28-06-2012
elcopa elcopa is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 10
Poder: 0
elcopa Va por buen camino
Antes de leer tu respuesta trate de inicializar la variable y el compilador no me marcaba la linea como compilada... entonces hice un procedimiento en otra unidad enviando como parametro tipo var la variable para inicializarla y ahi si se compilaba..... y funcionó...
He comentado esa inicializacion para probar tu consejo y ahora antes de mostrar la variable en el mensaje esta tiene el valor que debe, y en el mensaje se muestra correctamente. Esto me parece sospechoso, como que funciona a veces, cual si el compilador no trabajase correctamente.

Gracias por la ayuda!
Responder Con Cita
  #7  
Antiguo 29-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No, lo que ocurre es que el compilador sí que está trabajando perfectamente, y en este caso son las optimizaciones lo que hacía que no vieras el valor de la variable cantidad, ¿por qué?, pues simplemente porque después de esa línea no había nada que se hiciera con esa variable, entonces el compilador decide que no sirve de nada asignarle ningún valor.
Por eso, tras poner la línea que te he indicado, la del showmessage, el compilador decide darle el valor a la variable porque ahora sí tiene algo que hacer con ella, tiene que presentar su valor.
Por lo que no te preocupes, el compilador funciona perfecto
Responder Con Cita
  #8  
Antiguo 29-06-2012
elcopa elcopa is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 10
Poder: 0
elcopa Va por buen camino
Aclaracion

Me falto indicar que esas lineas que puse inicialmente son solo las del problema, pero en el procedimiento hay muchas lineas mas, y la variable en cuestion se utiliza en el mismo procedimiento enviandose como parametro a una funcion de una impresora fiscal. Esta impresora al llegarle esa variable en 0 opta por no grabar el documento.

Estas impresoras se utilizan en Panama, Chile y Argentina creo, las mismas almacenan los registros de ventas, notas de credito y funcionan para realizar el reporte al fisco.

En este caso la variable si se esta usando.
Responder Con Cita
  #9  
Antiguo 29-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
El caso es que así no podemos ayudar mucho, tendríamos que ver el código fuente.
Responder Con Cita
  #10  
Antiguo 29-10-2012
oec2509 oec2509 is offline
Miembro
 
Registrado: nov 2006
Posts: 24
Poder: 0
oec2509 Va por buen camino
Gracias

Cita:
Empezado por Casimiro Notevi Ver Mensaje
No, lo que ocurre es que el compilador sí que está trabajando perfectamente, y en este caso son las optimizaciones lo que hacía que no vieras el valor de la variable cantidad, ¿por qué?, pues simplemente porque después de esa línea no había nada que se hiciera con esa variable, entonces el compilador decide que no sirve de nada asignarle ningún valor.
Por eso, tras poner la línea que te he indicado, la del showmessage, el compilador decide darle el valor a la variable porque ahora sí tiene algo que hacer con ella, tiene que presentar su valor.
Por lo que no te preocupes, el compilador funciona perfecto
A mi esta información me sirvió de mucho, muchas gracias por su valiosa ayuda.

Saludos desde Costa Rica
Responder Con Cita
  #11  
Antiguo 29-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por oec2509 Ver Mensaje
A mi esta información me sirvió de mucho, muchas gracias por su valiosa ayuda.
Saludos desde Costa Rica
Me alegro
Responder Con Cita
Respuesta



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
Asignacion a Variable de tipo TXSCDecimal ruedabeat2003 Varios 4 23-12-2011 02:31:13
Mikropascal , La asignación a la variable de bucle no está permitido gaston260 ASM y Microcontroladores 3 02-11-2010 02:04:53
Cargar una matriz desde Excel a una variable de array of arrar of Double TecnoBestia Varios 3 07-07-2010 19:05:39
Convertir variable tipo variant a double Confucio Varios 3 13-11-2007 15:52:24
Error En Variable Double Red_Delphi Varios 3 03-09-2004 00:13:42


La franja horaria es GMT +2. Ahora son las 11:19:31.


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
Copyright 1996-2007 Club Delphi