Foros del Web » Programando para Internet » Javascript »

Duda numérica en Javascript

Estas en el tema de Duda numérica en Javascript en el foro de Javascript en Foros del Web. Buenas a todos, estoy un poco flipando, estoy haciendo una aplicación via web, y bueno, paso una serie de parametros a una funcion de javascript, ...
  #1 (permalink)  
Antiguo 05/01/2006, 09:12
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 3 meses
Puntos: 0
Duda numérica en Javascript

Buenas a todos, estoy un poco flipando, estoy haciendo una aplicación via web, y bueno, paso una serie de parametros a una funcion de javascript, uno que es alfanumerico y otro numérico.

La mayoría se muestran bien, pero hay ciertos números que no, sin ir más lejos os pongo un ejemplo:

Código HTML:
<html>
<body>
<script>
var a = 0037525;
alert(a);
</script>
</body>
</html> 
Por que el alert devuelve 16213 y no 37525??

Por qué si pongo un número mayor, como el 65523 si que funciona?

No sé si me termino de explicar, Javascript tiene limite de numeros?
Aunque he hecho una función para quitar los 00 que vienen delante del número y así funciona, tengo la curiosidad de saber porque Javascript malinterpreta esos números.

Espero que alguién me pueda aclarar este misterio.

Gracias de antemano
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
  #2 (permalink)  
Antiguo 05/01/2006, 13:18
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
Lo que está haciendo es devolverte el valor de octetos (¿bits?):

si pones:

0001 devuelve 1 (8^0)*1
0002 devuelve 2 (8^0)*2
0008 devuelve 8 (8^0)*3
0009 devuelve 9 (8^0)*4
0010 devuelve 8 (8^1*1)
0011 devuelve 9 (8^1*1+1*1)
0020 devuelve 16 (8^1*2)
00100 devuelve 64 (8^2*1)
00200 devuelve 128 (8^2*2)
001000 devuelve 512 (8^3*1)

001234 devuelve 668:
001000 = (8^3)*1 = 512
000200 = (8^2)*2 = 128
000030 = (8^1)*3 = 24
000004 = (8^0)*4 = 4
suma total ..... = 668


Ahora... ¿por qué?... pues vaya usted a saber pór qué javascript decide que dos ceros a la izquierda es eso y no otra cosa...

¿que cómo lo sé? ensayo-error de toda la vida, como la rata tira de la palanca para obtener comida...
  #3 (permalink)  
Antiguo 05/01/2006, 13:28
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
Al buscar en google la cadena: javascript número 010 8

del 4º resultado "Re: [PHP-ES] OT: Error en parseInt de js? :: ASPN Mail Archive ..."

http://aspn.activestate.com/ASPN/Mai...panish/1683576

extraemos:
Cita:
En JavaScript cualquier número precedido por un 0 se considera escrito en sistema octal*.
Solución: utilizar parseInt con su segundo parámetro opcional, que corresponde a la base en
que suponemos escrito el número. A saber:

var mivar = parseInt("08", 10); // mivar vale 8.
* sistema octal es...
Cita:
así, 010 = 8. Los números hexadecimales se representan con el prefijo 0x. Así, 0xA = 10.
me lo he ganao...

  #4 (permalink)  
Antiguo 06/01/2006, 03:58
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Cita:
Iniciado por ludovico2000
me lo he ganao...
¿La verdá? sí
  #5 (permalink)  
Antiguo 09/01/2006, 02:30
Avatar de crcbad  
Fecha de Ingreso: enero-2005
Mensajes: 302
Antigüedad: 19 años, 3 meses
Puntos: 0
De acuerdo

Gracias chicos, no he podido mirar hasta hoy lunes la respuesta a mi pregunta, y vaya es realmente curioso saber la forma en la que interpreta Javascript esos números, nunca vienen mal saber esas cosas, nunca se sabe cuando se van a anecesita

ludovico2000 efectivamente te lo has ganado :) Gracias compa
__________________

:cool: [ http://eruben.sytes.net ] :cool:


Las dos frases que te ayudarán a salir adelante:
  • No hay mujer fea, solo copas de menos. :borracho:
  • Ante la duda, siempre coge la más tetuda. :arriba:
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 00:35.