Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   detectar numeros negativos (https://www.clubdelphi.com/foros/showthread.php?t=32199)

Cosgaya 29-05-2006 21:46:16

detectar numeros negativos
 
como puedo detectar cuando una variable integer ( en delphi 7) contiene un numero negativo ?
gracias

vtdeleon 29-05-2006 21:48:23

si es menor a 0
if variable < 0 then

roman 29-05-2006 22:07:10

if Abs(variable) <> variable then

// Saludos

seoane 29-05-2006 22:42:32

Es curioso, pero en el caso de los double existe el -0.0 :D

reevil 29-05-2006 22:46:22

Cita:

Empezado por seoane
Es curioso, pero en el caso de los double existe el -0 :D

:confused: que utilidad tiene eso? :confused:

seoane 29-05-2006 22:54:34

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

roman 29-05-2006 22:59:51

¿Puedes poner un ejemplo de código en dónde esto que mencionas se refleje?

// Saludos

reevil 29-05-2006 23:10:06

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 ?? :eek:

seoane 29-05-2006 23:15:48

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 :D

roman 29-05-2006 23:54:20

Ok, pero, entonces, si tratamos a los double, como double, 0 y -0 sin lo mismo, ¿verdad?

// Saludos

seoane 29-05-2006 23:56:49

Cita:

Ok, pero, entonces, si tratamos a los double, como double, 0 y -0 sin lo mismo, ¿verdad?
Pues si, parece que si ...

Cosgaya 13-06-2006 13:06:28

Gracias por las respuestas
me quedo con la primera que es la mas facilita
a las otras ya llegare:D :D :D


La franja horaria es GMT +2. Ahora son las 13:17:28.

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