Autor
|
Tema: Cambiar base en javascript (Leído 6,315 veces)
|
Leber
Desconectado
Mensajes: 338
"Fracta, non verba"
|
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
|
|
|
En línea
|
"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.
|
|
|
En línea
|
|
|
|
sch3m4
Ex-Staff
Desconectado
Mensajes: 1.608
Nihil est in intelectu quod prius not fuerit insen
|
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.
|
|
|
En línea
|
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.
|
|
|
En línea
|
|
|
|
sirdarckcat
Aspirante a supervillano
Colaborador
Desconectado
Mensajes: 7.029
No estoy loco, soy mentalmente divergente
|
Hola Para pasar de hexadecimal a decimal, es asi: decimal=eval("0x"+hex);
Para pasar de octal a decimal, es asi: decimal=eval("0"+octal);
Para pasar de decimal a hexadecimal numeros entre 0 y 4095 puedes hacerlo asi: 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!!
|
|
« Última modificación: 2 Octubre 2007, 07:48 am por sirdarckcat »
|
En línea
|
|
|
|
Leber
Desconectado
Mensajes: 338
"Fracta, non verba"
|
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
|
|
« Última modificación: 2 Octubre 2007, 20:18 pm por Leber »
|
En línea
|
"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.
|
|
|
En línea
|
|
|
|
|
|