PDA

Ver la Versión Completa : Numero Mayor igual , Menor igual... Problema


ZiriusB
27-06-2011, 15:38:13
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:

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


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

if (npromedio.Text>='96') and (npromedio.Text<='100,00') then
begin
npromedio.Text:='4';
end;
otra solucion seria:
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

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

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
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
en cadenas 1 < 9


valor := '100' ;

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


else showmessage ('mayor');

ZiriusB
27-06-2011, 16:34:45
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


if (strtoint(npromedio.Text)>=0) and (strtoint(npromedio.Text)<=34,99) then
begin
npromedio.Text:='0'
end



Me genera un error

[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
no sera 34.99 en lugar de 34,99?

Creo que es por esto:

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
Me genera un error

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



Hola.

El error sucede en esta línea:

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:

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
Hola.

El error sucede en esta línea:

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:

if (StrToFloat(npromedio.Text) >= 0) and (StrToFloat(npromedio.Text) <= 34,99) then


Saludos.


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...