Cambiar base en javascript

Iniciado por Leber, 1 Octubre 2007, 20:21 PM

0 Miembros y 1 Visitante están viendo este tema.

Leber

Muy buenas, señores:

La duda va relacionada con una aplicacion que quiero hacer, la cual deberia cambiar un numero a la base que le dijeses: octal, decimal o hexadecimal.

Hice el archivo html,el cual te pidiera el numero, y la base. A este archivo HTML, lo enlazo con un archivo .js, el cual se encarga de elegir la base, mediante un switch, y realiza las operaciones. Luego en el html llamo la funcion dentro del script.

La duda viene a que no se como cambiar de base los numeros, he buscado bastante, y encontre el toString que no se muy bien si lo podria usar para estos fines.

¿Podrian echarme una mano?

Gracias de antemano
"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe

Ragnarok

Empieza por algo sencillo, como cambiar de base entre octal y hexadecimal. Busca información y haz preguntas más concretas.

toString no tengo ni idea de para qué querrías usarlo, a parte de para dar una vuelta convirtiendo todo a string como paso intermedio que casi complica más las cosas de lo que pudiera facilitarlas.
No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones

sch3m4

Es mejor que empieces con lo que te dice Ragnarok

Solo tienes que saber pasar de base 10 a base N, y de base N a base 10, ya que para pasar de base M a base N, has de pasar el numero expresado en base M a base 10, y luego pasarlo a base N.



SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..

Ragnarok

En realidad para pasar de octal a hexadecimal no necesita pasar a decimal para nada, creo que le complica las cosas bastante a menos que utilice parseInt(str,base), que no sé si podrá usar.

De lo que me acabo de dar cuenta es de que toString sí puede ser útil, es más, en hexadecimal sólo va a poder representarlo en forma de strings.
No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones

sirdarckcat

#4
Hola

Para pasar de hexadecimal a decimal, es asi:
Código (javascript) [Seleccionar]
decimal=eval("0x"+hex);

Para pasar de octal a decimal, es asi:
Código (javascript) [Seleccionar]
decimal=eval("0"+octal);

Para pasar de decimal a hexadecimal numeros entre 0 y 4095 puedes hacerlo asi:
Código (javascript) [Seleccionar]
hex=escape(String.fromCharCode((1<<12)+decimal)).slice(3)//donde cambias decimal por tu numero.

Para hacer el programa completo sinembargo, tendrás que hacerlo con divisiones, modulos, etc..

Lo que te mostre son truquitos que he usado para acelerar este proceso xD, pero debes hacer validaciones antes (una simle regexp).

Saludos!!

Leber

#5
Señores, les pido disculpas, me lei y ademas fuy muy poco conciso, llevo la tarde dandole vueltas al tema, y escribiendo en un papel lo que quiero hacer, y bueno empeze a sentarme ahora mismo.

Ahora sere más explicito:


Veran, la aplicacion pide dos numeros:

n1=prompt('Da numero: ');
base=prompt('Da la base: ');

La base es de 1 hasta 16, lo que hace la aplicacion es hacer el resto, es decir, el en switch tengo, por ejemplo en el case 3:


case '3': document.write(parseInt(n1) % parseInt(base))

Aqui se hace el resto, sino es 0, he creado un array, el cual manejo como recoger de nº, es decir, si se hace el resto de la division de 9/2, da "1", ese "1" lo envio a la posicion 0 del array, el cual dispone de 20 compartimentos.


Si no es 0, como dije, hago un if, el cual si el resultado no es 0, se le asigna al array[0] el resultado que haya dado, y continua haciendo la operacion hasta que no sea posible ir mas alla, o sencillamente que no se pueda.

Por ejemplo en la division de 9/2, al dar resto 1, me pasaria , ya que estoy diviendo entre 2, y este ya es un numero mas grande que "1". Estoy usando la sentencia IF para esto, y que a final, me visualize el array entero, es decir, quiza el resultado despues de varias divisiones hasta que no se ha podido mas ha dado: "01001"

No se si estoy abusando demasiado del IF o me estoy complicando la vida y hay un modo mas sencillo de hacerlo. Tambien habia pensado en el while, pero bien.   Bueno, no quiero darles mas la tabarra, gracias por haber respondido antes y por no haber sido mas preciso.

Saludos
"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe

Ragnarok

No sé los demás, pero yo me he hecho un lío, está bien describir el problema, la solución, los errores... pero describir el código es demasiado.

Mira que bonito lo ha puesto sirdarckcat con sus colores y todo.
No olvidéis leer las normas generales, además de las específicas de cada tablón.sgae, ladrones