Foros del Web » Programando para Internet » Javascript »

comparar numeros con javasript

Estas en el tema de comparar numeros con javasript en el foro de Javascript en Foros del Web. hola, sabrían donde está el error, Código PHP: < script >      etiquetas  = new Array();      etiquetas [ 0 ] = new Array();      etiquetas [ 0 ][ 0 ...
  #1 (permalink)  
Antiguo 26/05/2012, 14:26
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 9 meses
Puntos: 2
comparar numeros con javasript

hola,

sabrían donde está el error,

Código PHP:
<script>

    
etiquetas = new Array();
    
etiquetas[0] = new Array();
    
etiquetas[0][0]=1;
    
etiquetas[0][1]=12;
    
etiquetas[1] = new Array();
    
etiquetas[1][0]=2
    etiquetas
[1][1]=6

    
var maximo 0;
    for (
i=0;i<etiquetas.length;i++)
    {
        if ( 
etiquetas[i][1] > maximo )
        {
            
maximo etiquetas[i][1];
        }
    }

    var 
tagel;
    var 
numeroe;
    
    for (
i=0;i<etiquetas.length;i++)
    {
        
numeroe etiquetas[i][1];
        if ( 
0.00 < ( numeroe/maximo ) <= 0.25 ){tagel='tag1';}
        if ( 
0.26 < ( numeroe/maximo ) <= 0.50 ){tagel='tag2';}
        if ( 
0.51 < ( numeroe/maximo ) <= 0.75 ){tagel='tag3';}
        if ( 
0.76 < ( numeroe/maximo ) <= 1.00 ){tagel='tag4';}
        
        
alert(numeroe/maximo);
        
alert(tagel);
    }


</script> 
un saludo,
jose carlos.
  #2 (permalink)  
Antiguo 26/05/2012, 14:50
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: comparar numeros con javasript

Si es por sintáxis, salvo la advertencia de no encontrar declaradas las variables i y etiquetas, errores no hay. la script se ejecuta sin problemas
Si supiésemos como se aplica ese código, podria decirte algo más
saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 26/05/2012, 16:03
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 4 meses
Puntos: 206
Respuesta: comparar numeros con javasript

if ( 0.00 < ( numeroe/maximo ) <= 0.25 ){tagel='tag1';}
if ( 0.26 < ( numeroe/maximo ) <= 0.50 ){tagel='tag2';}
if ( 0.51 < ( numeroe/maximo ) <= 0.75 ){tagel='tag3';}
if ( 0.76 < ( numeroe/maximo ) <= 1.00 ){tagel='tag4';}

Estas comparaciones darán todas FALSE. Las comparaciones se hace dos a dos, y devuelven un booleano. La primera comparación [ 0.00 < ( numeroe/maximo )] dará TRUE o FALSE. La segunda comparación la hará entre [ TRUE (o FALSE) <= 0.25] y dará FALSE siempre.

Tienes que cambiarlas por ejemplo a:
var minumero=numeroe/maximo;
if ( 0.00 < minumero && minumero <= 0.25 ){tagel='tag1';}
  #4 (permalink)  
Antiguo 27/05/2012, 15:32
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: comparar numeros con javasript

bueno es evidente cual es el problema (pero si no logras verlo al vuelo, siempre puedes usar algunas de la herramientas de desarrollo que existen). no estás usando el operador de comparación (&&)

lo que te proponen es esto
Cita:
if ( 0 < numeroe && numeroe <= 0.25 ){tagel='tag1';}
if ( 0.26 < numeroe && numeroe <= 0.50 ){tagel='tag2';}
if ( 0.51 < numeroe && numeroe <= 0.75 ){tagel='tag3';}
if ( 0.76 < numeroe && numeroe <= 1 ){tagel='tag4';}
yo te propongo esto otro
Cita:
if (numeroe <= 0.25 && numeroe > 0){tagel='tag1';}
if (numeroe <= 0.50 && numeroe > 0.26){tagel='tag2';}
if (numeroe <= 0.75 && numeroe > 0.51){tagel='tag3';}
if (numeroe <= 1 && numeroe > 0.76){tagel='tag4';}
con ambos obtendrás el mismo resultado, pero de esta manera la ejecución será más optima

por qué?? supongamos que el valor de numeroe es 0.80. con el primer código tendrá que hacer 8 comparaciones. mientras que con mi propuesta serán 5. es decir, si la primera comparación retorna false no evalúa la siguiente y pasa al siguiente if

por cierto la herramientas de desarrollo son
chrome y ie ---> pulsa f12 y aparecerá
ff --> has de instalar el addon firebug
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #5 (permalink)  
Antiguo 27/05/2012, 16:07
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 4 meses
Puntos: 206
Respuesta: comparar numeros con javasript

Y si usas
Código Javascript:
Ver original
  1. var enumero=numeroe/maximo;
  2. if (enumero<=0.5)
  3. {
  4. if (enumero<=0.25) tagel='tag1';
  5. else tagel='tag2';
  6. }
  7. else
  8. {
  9. if (enumero<=0.75) tagel='tag3';
  10. else tagel='tag4';
  11. }

Siempre harás dos únicas comparaciones.
  #6 (permalink)  
Antiguo 28/05/2012, 05:01
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: comparar numeros con javasript

normalmente dejo de jugar cuando se cambian las reglas del juego unilateralmente, pero en tu caso haré una excepción en deferencia a algún post que te he leído

continuemos jugando

y sí lo progamamos todo en 30s y sin necesidad de tantas condicionales??
Cita:
for (var i in matriz=[-1, 0.25, 0.50, 0.75, 1])
if(enumero <= matriz[i]) {alert('tag'+i); break;}
por cierto, no son 2 comparaciones. es un rango entre 2 o 4, los else también hay que contarlos
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #7 (permalink)  
Antiguo 28/05/2012, 06:12
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 4 meses
Puntos: 206
Respuesta: comparar numeros con javasript

Me encanta jugar, viendo distintas formas de resolver el mismo problema es cuando realmente se aprende y mejora uno. Pero ¿por qué dices que he cambiado las reglas unilateralmente? No entiendo.

En cuanto a los else, yo creo que no se computan. A nivel ensamblador, el THEN de un IF es una instrucción de tipo salto. El "ELSE" no tiene correspondencia, porque simplemente el THEN o salta a una línea posterior (el código contenido en el THEN), o no salta. Si no salta, ejecuta la siguiente línea, que es el contenido del ELSE. En resumen, no tiene ningún coste computacional.

Y por último, ¿por qué no ver en vivo lo que tarda cada código en ejecutarse? hay una preciosa herramienta pensada para comprobar códigos. El número que devuelve indica la cantidad de veces por segundo que puede ejecutarse ese código. Es decir, cuanto más alto, tanto mejor.
http://jsperf.com/if-test-forosdelweb

(Usando Firefox 12)
27,370 (código con for) VS 1,102,097 (2 condicionales)

El coste de recorrer un for es muy costoso.

Usando tu primera solución, la diferencia es mínima (las comparaciones booleanas se ejecutan muy rápido, se pierde mucho más tiempo en la llamada a la función "calcula"), pero el código de los 2 comparaciones, es ligeramente más rápido.
http://jsperf.com/if-test2-forosdelweb

Última edición por marlanga; 28/05/2012 a las 06:35
  #8 (permalink)  
Antiguo 28/05/2012, 14:25
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: comparar numeros con javasript

Cita:
Iniciado por marlanga Ver Mensaje
¿por qué dices que he cambiado las reglas unilateralmente? No entiendo.
el objetivo era hacer la validación lo mas eficiente posible usando el operador, ya que es una manera fácil de programar. imagina que el rango, en lugar de ser de 0-1, fuese de 0-10

Cita:
Iniciado por marlanga Ver Mensaje
En cuanto a los else, yo creo que no se computan. A nivel ensamblador, el THEN de un IF es una instrucción de tipo salto. El "ELSE" no tiene correspondencia, porque simplemente el THEN o salta a una línea posterior (el código contenido en el THEN), o no salta. Si no salta, ejecuta la siguiente línea, que es el contenido del ELSE. En resumen, no tiene ningún coste computacional.
está claro que no tiene que computar ningún dato. por lo tanto creo que tienes razón

Cita:
Iniciado por marlanga Ver Mensaje
Y por último, ¿por qué no ver en vivo lo que tarda cada código en ejecutarse? hay una preciosa herramienta pensada para comprobar códigos.
personalmente no me gustas esas herramientas. probando dos código iguales, siendo la única diferencia el parámetro que se le pasa, se obtienes valores totalmente distinto. incluso, si se vuelve a testear, los datos obtenidos difieren considerablemente de la anterior prueba

Cita:
Iniciado por marlanga Ver Mensaje
(Usando Firefox 12)
27,370 (código con for) VS 1,102,097 (2 condicionales)

El coste de recorrer un for es muy costoso.
es algo que se esperaba. el punto era dar otra opción que implicase programarla en 30 segundos como dije, sin pensar en ahorrar recursos
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: numeros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:16.