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 29-05-2006
Cosgaya Cosgaya is offline
Miembro
 
Registrado: jun 2005
Posts: 105
Poder: 19
Cosgaya Va por buen camino
detectar numeros negativos

como puedo detectar cuando una variable integer ( en delphi 7) contiene un numero negativo ?
gracias
Responder Con Cita
  #2  
Antiguo 29-05-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
si es menor a 0
if variable < 0 then
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #3  
Antiguo 29-05-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
if Abs(variable) <> variable then

// Saludos
Responder Con Cita
  #4  
Antiguo 29-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Es curioso, pero en el caso de los double existe el -0.0

Última edición por seoane fecha: 29-05-2006 a las 22:48:15.
Responder Con Cita
  #5  
Antiguo 29-05-2006
reevil reevil is offline
Miembro
 
Registrado: abr 2006
Posts: 179
Poder: 19
reevil Va por buen camino
Cita:
Empezado por seoane
Es curioso, pero en el caso de los double existe el -0
que utilidad tiene eso?
Responder Con Cita
  #6  
Antiguo 29-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
que utilidad tiene eso?
Ninguna, se debe a que se utiliza un bit para indicar el signo. Asi que puede darse la situacion en que el valor sea 0 pero el bit de signo indique que es negativo. Mas que ser util es molesto pues hay que tenerlo en cuenta a la hora de comprobar si un numero es igual a 0
Responder Con Cita
  #7  
Antiguo 29-05-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Puedes poner un ejemplo de código en dónde esto que mencionas se refleje?

// Saludos
Responder Con Cita
  #8  
Antiguo 29-05-2006
reevil reevil is offline
Miembro
 
Registrado: abr 2006
Posts: 179
Poder: 19
reevil Va por buen camino
Cita:
Empezado por seoane
... hay que tenerlo en cuenta a la hora de comprobar si un numero es igual a 0
-0 es distinto de 0 ??
Responder Con Cita
  #9  
Antiguo 29-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Sin ir mas lejos y siguiendo con el tema del hilo, Delphi usa la siguiente funcion para comprobar el signo de un double.

Código Delphi [-]
function Sign(const AValue: Double): TValueSign;
begin
  if ((PInt64(@AValue)^ and $7FFFFFFFFFFFFFFF) = $0000000000000000) then
    Result := ZeroValue
  else if ((PInt64(@AValue)^ and $8000000000000000) = $8000000000000000) then
    Result := NegativeValue
  else
    Result := PositiveValue;
end;

En el primer if comprueba si el valor es 0 eliminando primero el bit de signo, de esta manera 0.0 y -0.0 son considerados como un mismo numero.

Sin embargo, estuve haciendo pruebas y parece que delphi ya tiene en cuenta esta eventualidad a la hora de hacer comparaciones. Por ejmplo:

Código Delphi [-]
var
  d1, d2: double;
begin
  d1:= -0.0;
  d2:= 0.0;
  // Esto nos dice d1 es igual a d2
  ShowMessage('(d1 = d2) = ' + BoolToStr(d1 = d2,TRUE));
  // Sin embargo si comparamos bit a bit nos dice que no es asi
  ShowMessage('(d1 = d2) = ' + BoolToStr(Comparemem(@d1,@d2,Sizeof(double)),TRUE));
end;

Vaya forma de darle vueltas al asunto
Responder Con Cita
  #10  
Antiguo 29-05-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ok, pero, entonces, si tratamos a los double, como double, 0 y -0 sin lo mismo, ¿verdad?

// Saludos
Responder Con Cita
  #11  
Antiguo 29-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Ok, pero, entonces, si tratamos a los double, como double, 0 y -0 sin lo mismo, ¿verdad?
Pues si, parece que si ...
Responder Con Cita
  #12  
Antiguo 13-06-2006
Cosgaya Cosgaya is offline
Miembro
 
Registrado: jun 2005
Posts: 105
Poder: 19
Cosgaya Va por buen camino
Gracias por las respuestas
me quedo con la primera que es la mas facilita
a las otras ya llegare
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
Sumar por Separado Positivos y Negativos en Rave norberto_larios Impresión 1 19-08-2006 16:57:48
Detectar IP Carliviris Varios 3 17-04-2006 19:18:26
Negativos en un editmask lbidi Varios 4 31-08-2005 21:55:22
Edit para numeros negativos RyAr Varios 6 28-10-2003 21:09:57
como conseguir introducir valores negativos en un edit haffo OOP 10 24-10-2003 03:38:01


La franja horaria es GMT +2. Ahora son las 16:29:14.


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