Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Numero Mayor igual , Menor igual... Problema (https://www.clubdelphi.com/foros/showthread.php?t=74577)

ZiriusB 27-06-2011 15:38:13

Numero Mayor igual , Menor igual... Problema
 
Buenos dias, tengo un problema estoy realizando una aplicacion en donde arrojo un numero como resultado, y realizo una operacion para darle a ese numero un valor depende de lo que de el resultado...

Es decir si el resultado va de 1 a 50, entonces en NPROMEDIO voy a obtener un "2", si va de 50 a 70 en N PROMEDIO obtendre un "3"... asi tengo hasta el momento la sentencia:

Código Delphi [-]
if (npromedio.Text>='0') and (npromedio.Text<='34,99') then
begin
npromedio.Text:='0'
end

    else

if (npromedio.Text>='35') and (npromedio.Text<='45,99') then
begin
npromedio.Text:='1'
end

    else

if (npromedio.Text>='46') and (npromedio.Text<='74,99') then
begin
npromedio.Text:='2'
end

    else

if (npromedio.Text>='75') and (npromedio.Text<='95,99') then
begin
npromedio.Text:='3'
end

    else

if (npromedio.Text>='96') and (npromedio.Text<='100') then
begin
npromedio.Text:='4';
end;

El problema es que cuando el resultado es 100 me coloca en NPROMEDIO "0" aun cuando le digo que sera "4", intente con otro TEDIT y me da el mismo resultado...tengo solo problemas cuando es 100...cuando va de 1 a 99 todo esta bien!

Si podrian guiarme se los agradeceria

Un millon de gracias!

oscarac 27-06-2011 15:42:59

me ha pasado que cuando se utilizo cadenas (con numeros) para comparaciones, se genera algun tipo de inconsistencia

trata de pasar las cadenas a numero

Código Delphi [-]
 
if (strtoint(npromedio.Text)>=0) and (strtoint(npromedio.Text)<=34,99) then
begin
npromedio.Text:='0'
end

aposi 27-06-2011 15:49:49

cuando en npromedio.text es 100, o es 100,00 ?? En formato texto, como es ti caso, 100,00 es mayor que 100
Código:

if (npromedio.Text>='96') and (npromedio.Text<='100,00') then
 begin
  npromedio.Text:='4';
 end;

otra solucion seria:
Código:

if (npromedio.Text>='96') then
 begin
  npromedio.Text:='4';
 end;


ZiriusB 27-06-2011 15:51:18

Me genera un error de tipos no compatibles

Código:

[DCC Error] Evaluacion.pas(684): E2008 Incompatible types
Aposi:

Es "100" ese numero es el resultado de la suma de otros...las otras formas ya las he intentado y nada que resulta, sin embargo si coloco SOLO:

Código Delphi [-]
if (npromedio.Text=100)  then
begin
npromedio.Text:='4'
end


Ahi si me escribe "4"

aposi 27-06-2011 15:53:56

Pensandolo mejor, como dice oscarac es mejor passar a numero el valor
si es texto 100 es menor de 96...

oscarac 27-06-2011 15:56:51

Cita:

Empezado por aposi (Mensaje 404913)
Pensandolo mejor, como dice oscarac es mejor passar a numero el valor
si es texto 100 es menor de 96...

en cadenas 1 < 9

aposi 27-06-2011 16:03:40

Cita:

Empezado por oscarac (Mensaje 404914)
en cadenas 1 < 9

Código:

valor := '100' ;

  if valor <= '96' then showmessage ('menor')


  else showmessage ('mayor');


ZiriusB 27-06-2011 16:34:45

Cita:

Empezado por oscarac (Mensaje 404909)
me ha pasado que cuando se utilizo cadenas (con numeros) para comparaciones, se genera algun tipo de inconsistencia

trata de pasar las cadenas a numero

Código Delphi [-]
 
if (strtoint(npromedio.Text)>=0) and (strtoint(npromedio.Text)<=34,99) then
begin
npromedio.Text:='0'
end

Me genera un error

Código:

[DCC Error] Evaluacion.pas(684): E2008 Incompatible types

oscarac 27-06-2011 16:39:52

no sera 34.99 en lugar de 34,99?

ZiriusB 27-06-2011 16:58:31

Cita:

Empezado por oscarac (Mensaje 404923)
no sera 34.99 en lugar de 34,99?

Creo que es por esto:

Código Delphi [-]
npromedio.text := Floattostr(StrToFloat(edit13.Text) +  StrToFloat(edit14.Text));

Es una linea que tengo antes de el primer codigo que pase...

ecfisa 27-06-2011 17:10:10

Cita:

Me genera un error
Código:

[DCC Error] Evaluacion.pas(684): E2008 Incompatible types

Hola.

El error sucede en esta línea:
Código Delphi [-]
if (strtoint(npromedio.Text)>=0) and (strtoint(npromedio.Text)<=34,99) then

Y es por que npromedio.Text puede asumir un valor real, por lo tanto la comparación correcta es:
Código Delphi [-]
if (StrToFloat(npromedio.Text) >= 0) and (StrToFloat(npromedio.Text) <= 34,99) then

Saludos.

oscarac 27-06-2011 17:12:45

bueeeeeenoooo
la cosa estaba por ahi gracias ecfisa

ZiriusB 27-06-2011 17:31:24

Cita:

Empezado por ecfisa (Mensaje 404934)
Hola.

El error sucede en esta línea:
Código Delphi [-]
if (strtoint(npromedio.Text)>=0) and (strtoint(npromedio.Text)<=34,99) then

Y es por que npromedio.Text puede asumir un valor real, por lo tanto la comparación correcta es:
Código Delphi [-]
if (StrToFloat(npromedio.Text) >= 0) and (StrToFloat(npromedio.Text) <= 34,99) then

Saludos.


Código Delphi [-]
if (StrToFloat(npromedio.Text)>=0) and (StrToFloat(npromedio.Text)<=34.99) then
npromedio.Text:='0';

Exacto, lo cambie en todos y listo...ademas de cambiar la "," por el "."

Gracias amigos...


La franja horaria es GMT +2. Ahora son las 22:36:56.

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