¿Cómo puedo realizar una comparación de números negativos en Delphi?

Tengo una pregunta lo que pasa que cuando quiero comparar dos números negativos si son iguales no me lo compara bien me sale que es falso porque y como podría comparar lo que pasa que tengo tres campos uno es la resta de dos valores que se llama valoration y este campo tanto puede dar el valor negativo o positivo y tengo un campo que es la tolerancia es positivo pero indica un rango de más menos y lo que intente primero es el valor si es negativo usar la función abs de delphi que me convierte al valor absoluto y hacer la comparación de if(variation<=tolerance) then
resultad0:=acepte''
else
resultado:='Fail';
Pero no me funnciona cuando son iguales
Y otra quise hacer comparar dos números negativos iguales y me tiene que dar aceptado pero tampoco funciona lo que hice fue restar y dos negativos y debe dar cero pero lo corro linea por linea y me da una cantidad menoa a cero creo que ha de ser basura pero por eso no me hace el if y entonces cual podría ser la solución.
Necesito comparar un numero positivo o negativo en un rango
Y estoy batallando mucho porque cuando hago una resta si me da el valor cero pero al comparar ya no se que hacer me podrías ayudar.

1 Respuesta

Respuesta
1
no entendi muy bien el asunto, lo que capte es que quieres comparar 2 numeros negativos si son iguales o no, y dependiendo te mandaria acepte o fail segun corresponda, si es asi: checa este codigo en el cual compara 2 numeros negativos
procedure TForm1.Button1Click(Sender: TObject);
var numero1,numero2:integer;
begin
numero1 := -1;
numero2 := -1;
if numero1 = numero2 then
showMEssage('acepte')
else
showMEssage('fail');
end;
end.
Por supuesto en este caso te envío me mostraría el mensaje acepte, si tu le cambias a la variable numero2 el valor -2, entonces mostraría el mensaje fail.
Checalo y dime si entendí el problema.
Pues si pero los números que utilizo son doubles
Por decir
variation:=-0.01
Tolerance:=-0.01
if variation=tolerance then
show.....
else
show....
Pero al hacer esto me manda siempre al else y no debe ser porque son iguales de otra forma que intente la comparación es
variation:=abs(variation); hacer positivo el valor
if variation<=tolerance then( para manejar puros positivos)
Pero al llegar cuando son iguales me brinca al else
Y se supone que cuando son iguales tanto negativos o positivos debe estar dentro del if como le puedo hacer
Ah! Caray, lo estoy probando con doubles y si funciona bien, este es el código que estoy probando, checalo y dime:
procedure TForm1.Button1Click(Sender: TObject);
var numero1,numero2:double;
begin
numero1 := -0.01;
numero2 := -0.01;
if numero1 = numero2 then
showMEssage('acepte')
else
showMEssage('fail');
end;
Si yo ejecuto esto tal y como esta, me manda el mensaje 'acepte'. Checalo.
Es que yo lo tengo en un query en el evento del field onChange no se si eso me este afectando mi if
Ya verifique la función pero cuando le pongo valores directamente me funciona pero cuando se los paso por la tabla ya no que es lo que me esta haciendo la tabla que los convierte por decir hice una función
funcionx(-0.01,-0.01); así si funciona
Pero cuando lo pongo con la tabla no
funcionx(frm..TResultvariationa.value,frm..TresultTolerance.value); y asi ya no me respeta los negativos mi tabla la tengo declarada como double en acces
Bueno es probable que realmente no sean iguales: mira antes de hacer tu IF pon un ShowMessage monstrando primeramente los valores a comparar directamente de la tabla: digamos que estas usando un TTable, entonces pondrías:
ShowMessage(Table1NUMERO1. AsSring); //donde NUMERO1 es el campo con el primer valor
ShowMessage (Table1NUMERO2.AsString) // donde NUMERO2 es el segundo valor.
¿Si me explico lo que quiero que hagas?, ver que realmente los valores estén iguales.
Si ya lo hice y si me manda los valores iguales pero ya al hacer un if es cuando me falla .
Y el if que tengo solo es pa comparar dos valores iguales
if valor1= valor2 then
...
else
.....;
Y ya puse el showmessage y me envía los dos números 0.01 hay me tiene que dar que es aceptado pero si los pongo directamente me funciona pero ya con los valores de la tabla no.
mira este es mi codigo
procedure TfrmCalSum.ResvHs(valor1:double;valor2:double);
begin
vRev:='';
showmessage(FloattoStr(valor1));
showmessage(FloattoStr(valor2));
if valor1 = valor2 then
vRev:='Acepted'
else
vRev:='Fail';
end;
esto lo tengo en el beforepost
y los valores que uso en variationa= 0.01 y en variationb=0.01 y tolerance= 0.01 en la tabla
las variationes los saco de un master=0.5 y dos reading=0.51 la resta pues me da 0.01 la variation = reading-master.
frmCalSum.TCalResultrvariationa.Value:=frmCalsum.TCalResultrreadinga.Value-frmCalSum.TCalResultrmaster.Value;
frmCalSum.TCalResultrvariationb.Value:=frmCalsum.TCalResultrreadingb.Value-frmCalSum.TCalResultrmaster.Value;
vreva:=frmCalSum.TCalResultrvariationa.Value;
frmCalSum.ResvHs(vreva,frmCalSum.TCalResultrtolerance.Value);
frmCalSum.TCalResultrresvhsa.Value:=vRev;
vrevb:=frmCalSum.TCalResultrvariationb.Value;
frmCalSum.ResvHs(vrevb,frmCalSum.TCalResultrtolerance.Value);
frmCalSum.TCalResultrresvhsb.Value:=vRev;
Y pues ya corrí linea por linea y me saca los valores bien pero en el if es donde ya no cumple no se si estoy aguardando algo mal o hay una función que me compare ya en delphi entre un rango o algo así ya no se que hacer jej
Si esta muy raro, porque no pruebas poniendo un showMessage antes de llamar al procedimiento ResvHs, es decir que te muestre los valores breva y frmCalSum. TCalResultrtolerance. Value antes de pasarselos como parametros al procedimiento que te compara.
Y otra cosa que tipo de objecto es el TCalResultrtolerance. Value?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas