Comunidad de diseño web y desarrollo en internet online

Error INEXPLICABLE y sin sentido, ayuda

Citar            
MensajeEscrito el 21 Jul 2008 06:05 pm
A ver, el código es muy sencillo y muy poquito, pero resulta que da error en una simple sentencia IF...

Al comprobarse la sentencia if no debería ejecutarse lo de dentro, pero no sé por qué se ejecuta.

Miradlo que es muy poco código y me tiene loco, ya no sé que carajos hacer.

saludos!!

aHí va el archivo
http://www.megaupload.com/es/?d=94R1S30G

Por 7toni7

37 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Jul 2008 07:28 pm
nadie me echa una manilla!?

Por 7toni7

37 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Jul 2008 08:48 pm

Por One

Claber

1488 de clabLevel

5 tutoriales

Genero:Masculino  

Programador Web

firefox
Citar            
MensajeEscrito el 22 Jul 2008 10:19 am
Otra vez no te molestes en responder para poner eso tio..
si no quieres responder simplemente no respondas, pero molestar por molestar pues nop.

Sigo buscando esa ayudita :)

Por 7toni7

37 de clabLevel



 

msie7
Citar            
MensajeEscrito el 22 Jul 2008 12:11 pm
Es una limitante de action script el no trabajar bien con decimales, por ejemplo haz el siguiente ejemplo:

Código :

var num:Number = 0;

for(var n=0; n<10; n++){
   
   num += 0.1;
   
   trace('El valor de num es '+ num);
   
}

trace("ahora mira esta condición:");

if(num == 1){
   
   trace('El valor de num si es 1');
   
}else{
   
   trace('El valor de num no es 1');
   
}


O intenta este otro más simple:

Código :

trace(10.1 - 10);


Debería dar 0.1, pero sin embargo da una aproximación cercana.

Normalmente como yo lo he llegado a resolver, es que por ejemplo el anterior cálculo, AS no utilice decimales para hacerlo y al final divido el resultado por la cantidad misma de decimales. Con la siguiente función lo podrás comprender:

Código :

function givemeMaxDecimal(numero1, numero2):Number{
   
   var numero1String:String = String(numero1);
   var numero2String:String = String(numero2);
   
   var numero1Array:Array = numero1String.split(".");
   var numero2Array:Array = numero2String.split(".");
   
   var decimals1:Number = (numero1Array[1].length != undefined)?numero1Array[1].length:0;
   var decimals2:Number = (numero2Array[1].length != undefined)?numero2Array[1].length:0;
   
   var maxDecimal:Number = Math.max(decimals1, decimals2);
   
   return Math.pow(10, maxDecimal);
   
}



En la anterior función saco de los dos números cuál tiene mayor lugar de decimales para poder realizar lo siguiente:

var decimals:Number = givemeMaxDecimal(numero1, numero2);

trace((numero2*decimals - numero1*decimals)/decimals);

El anterior resultado nos dará 0.1 como esperábamos porque para la resta AS no ha utilizado decimales.

Ahora en el ejemplo concreto tuyo lo mejor es redondear, pero de la siguiente manera:

Código :

function giveMeDecimals(numero:Number):Number{
   
   var numeroString:String = String(numero);
   
   var numeroArray:Array = numeroString.split(".");
   
   var decimals:Number = (numeroArray[1].length != undefined)?numeroArray[1].length:0;
   
   return Math.pow(10, decimals);
   
}

function realRound(numero:Number):Number{
   
   var decimals:Number = giveMeDecimals(numero);
   var real:Number = Math.round(numero*decimals)/decimals;
   
   return real;
   
}


La función realRound lo que hace es dejar al número sin decimales, redondearlo y después dividirlo por la cantidad misma de decimales, parece una tontería pero logra lo que necesitas, compruébalo de la siguiente forma:

Código :

if (realRound(limite_inferior) < realRound(e/10)) {
   
   trace("No debería mostrar este mensaje");
   
}


No te mostrará es mensaje porque 1.7 no puede ser menor que 1.7

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 23 Jul 2008 11:56 am
muchas gracias por la contestacion, eres un crack.

Por 7toni7

37 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.