Código HTML:
<script> var a = '0018'; var b = '000053'; if(b>a){alert(b + ' es mayor');} else {alert(a + ' es mayor')} </script>
"0018 es mayor"
¿Por qué? ¿Cómo comparan?
| |||
Por qué? [comparar cadenas] Hola, tengo una duda en js y otros lenguajes que me dan el mismo resultado al ejecutar las siguientes líneas: Código HTML: <script> var a = '0018'; var b = '000053'; if(b>a){alert(b + ' es mayor');} else {alert(a + ' es mayor')} </script> "0018 es mayor" ¿Por qué? ¿Cómo comparan? |
| |||
Respuesta: Por qué? [comparar cadenas] Ocurre eso porque los estás tratando como strings y la comparación se hace literal en vez de numérica:
Código:
Para solucionarlo elimina las comillas y los ceros sobrantes o pásalos a int mediante parseInt() o Number() "0018" "000053" |
| |||
Respuesta: Por qué? [comparar cadenas] Cita: Hola PHPeros,Sí, yo sé que son strings y a eso iba mi duda. Es decir, por qué la cadena '0018' es "¿mayor?" que la cadena '000053'? veo que resaltas el 1 y 0 de la tercera posición en ambas cadenas.. con eso quieres decir a que es algo parecido al orden alfabético? Gracias por tu respuesta :D |
| ||||
Respuesta: Por qué? [comparar cadenas] Si, es orden alfabetico:
Código:
0 0 1 8 0 0 0 0 5 3 ^
__________________ Grupo Telegram Docker en Español |
| ||||
Respuesta: Por qué? [comparar cadenas] En realidad se hace mirando el valor hexadecimal de cada caracter UTF-8 que forma parte de la cadena. Claro que dicho ordenamiento se hizo respetando el orden alfabético, para no volver locos al personal. Aquí pone el valor hexadecimal de cada uno de ellos: http://www.utf8-chartable.de/ Comparar dos cadenas es mirar el valor hexadecimal de cada caracter de cada una de ellas, comparándola con el caracter en la misma posición de la otra cadena. Se miran uno a uno y de izquierda a derecha. La primera pareja de caracteres que no sean iguales decidirá el orden de una cadena con respecto a la otra. Por si no queda claro, el valor hexadecimal es un número en base 16, asi que comparar dos valores hexadecimales es comparar dos números, que por cierto es una de las muy pocas operaciones booleanas que sabe realizar perfectamente un procesador. Última edición por marlanga; 12/02/2015 a las 13:46 |
| ||||
Respuesta: Por qué? [comparar cadenas] Si hubieras puesto una oferta en el foro equivocado con algún trabajo inútil yo también te pediría 1000USD. Saludos
__________________ Grupo Telegram Docker en Español |
Etiquetas: |