AVERIGUAR EL VALOR DE UN NÚMERO DECIMAL (base 10) EN LAS BASES 2 A 9

Página inicial

 

 

 

La fórmula modelo para hacer cualquier conversión desde decimal (o base 10) a otra base (de 2 a 9) es, hasta el Excel 2003:

 

{=SUMA(RESIDUO(ENTERO(celda/base^((FILA(INDIRECTO("1:"&ENTERO(LOG(celda;base))+1)))-1));base)*10^(FILA(INDIRECTO("1:"&ENTERO(LOG(celda;base))+1))-1))}

 

A partir de Excel 2007 Microsoft cambió en nombre de la función RESIDUO, que pasó a llamarse RESTO (más correcto), por lo que la fórmula es:

 

{=SUMA(RESTO(ENTERO(celda/base^((FILA(INDIRECTO("1:"&RESTO(LOG(celda;base))+1)))-1));base)*10^(FILA(INDIRECTO("1:"&RESTO(LOG(celda;base))+1))-1))}

 

donde:

 

Por ejemplo, para convertir el valor decimal (base 10) de la celda A1 a binario (base 2), la fórmula (usando de forma explícita la base a la que se desea convertir) sería:

 

{=SUMA(RESIDUO(ENTERO(A1/2^((FILA(INDIRECTO("1:"&ENTERO(LOG(A1;2))+1)))-1));2)*10^(FILA(INDIRECTO("1:"&ENTERO(LOG(A1;2))+1))-1))}

 

en Excel 2003, y

 

{=SUMA(RESTO(ENTERO(A1/2^((FILA(INDIRECTO("1:"&ENTERO(LOG(A1;2))+1)))-1));2)*10^(FILA(INDIRECTO("1:"&ENTERO(LOG(A1;2))+1))-1))}

 

a partir de Excel 2007.

 

 

Esta fórmula de conversión tiene dos limitaciones. La primera de ellas resulta insoslayable: se trata de la precisión numérica máxima de Excel, la cual sabemos que es de 15 dígitos (artículo sobre este tema).

 

Esta precisión máxima de 15 dígitos significa, en lo que se refiere al tema que estamos tratando, que cualquier número devuelto por la fórmula cuya longitud sea superior a esos 15 dígitos verá convertidos en ceros automáticamente todos los dígitos situados a la derecha, a partir del dígito 16 inclusive. Esto no le impedirá a la fórmula realizar los cálculos (es decir, no provocará un error), pero los resultados mostrados podrán no ser correctos.

 

Esta primera limitación implica que los números más altos que puede devolver la fórmula con garantías en cada una de las bases 2 a 9 sean:

 

Base Número máximo en esa base Número en decimal
2 1000000000000000(2 32.768
3 1000000000000000(3 14.348.907
4 1000000000000000(4 1.073.741.824
5 1000000000000000(5 30.517.578.125
6 1000000000000000(6 470.184.984.576
7 1000000000000000(7 4.747.561.509.943
8 1000000000000000(8 35.184.372.088.832
9 1000000000000000(9 205.891.132.094.649

 

 

La segunda limitación que tiene la fórmula se debe a un fallo en la función RESIDUO de Excel que hace que se produzca el error #¡NUM! cuando el dividendo de la división que ha de procesar RESIDUO es ≥ 134.217.728 veces el divisor. Este error está reconocido por Microsoft y debidamente documentado. Este fallo se produce hasta la versión 2003.

 

La siguiente tabla es la anterior, añadiendo la limitación provocada por este error:

 

Base Número máximo en esa base Número en decimal Base * 134.217.728
2 1000000000000000(2 32.768 268.435.456
3 1000000000000000(3 14.348.907 402.653.184
4 1000000000000000(4 1.073.741.824 536.870.912
5 1000000000000000(5 30.517.578.125 671.088.640
6 1000000000000000(6 470.184.984.576 805.306.368
7 1000000000000000(7 4.747.561.509.943 939.524.096
8 1000000000000000(8 35.184.372.088.832 1.073.741.824
9 1000000000000000(9 205.891.132.094.649 1.207.959.552

   

Se puede comprobar cómo para las bases 2 y 3 la peor limitación de las dos posibles es la insoslayable, pero que a partir de la base 4 la peor limitación pasa a ser la segunda.

 

Esta segunda limitación provocada por el error de la función RESIDUO sí se pude soslayar, si se paga el precio de complicar aún más la fórmula al tener que prescindir de dicha función en ella, pasando a hacer el cálculo de los restos de las divisiones "a mano":

 

{=SUMA((ENTERO(celda/base^((FILA(INDIRECTO("1:"&ENTERO(LOG(celda;base))+1)))-1))-(ENTERO(ENTERO(celda/base^((FILA(INDIRECTO("1:"&ENTERO(LOG(celda;base))+1)))-1))/base)*base))*10^(FILA(INDIRECTO("1:"&ENTERO(LOG(celda;base))+1))-1))}

 

Así pues esta última fórmula es la recomendada en Excel 2003 para las bases 4 a 9, dejando la primera fórmula como la recomendada para las bases 2 y 3, aunque por supuesto la fórmula más "universal" es la más complicada de las dos, esto es, la última.

 

A partir de Excel 2007, la fórmula más sencilla debería funcionar sin problemas, por lo que no tiene sentido utilizar la más complicada. En cualquier caso, si se usara habría que sustituir ENTERO por RESTO.

 

 

Notas:

 

 

 

Nota adicional:

 

Por alguna extraña razón, el buscador Google está mostrando esta página como primer resultado de la búsqueda "averiguar en qué base está un número" y algunas variantes de la misma.

 

El asunto, como es obvio, escapa por completo al tema de esta página, pero diré que la única forma de saber con toda seguridad a qué base pertenece un número es que se la haya puesto de forma explícita al final del mismo mediante un paréntesis izquierdo y la base, situados como subíndices: por ejemplo 123456(7 es un número base 7, mientras que 123456(9 es un número base 9. Si un número carece de su base, se sobreentiende que es de la base con la que trabajamos normalmente, esto es base 10.

Por exclusión es posible saber a qué base o bases no puede pertenecer un número: así, si un número contiene un 2 no puede ser binario, si contiene un 3 no puede ser de base 3 ni base 2, si contiene un 4 no puede ser de base 4 ni 3 ni 2, etcétera. Pero, sin embargo, un número compuesto exclusivamente por unos y ceros podría "ser", evidentemente, de base 2, pero también de cualquier otra base, salvo que se haga constar de forma explícita que dicha base es la 2: 1101101(2 es base 2 mientras que 1101101(9 es base 9; pero 1101101 puede ser de cualquier base aunque "tenga pinta" de ser base 2.
 

 

Página inicial