Ver Mensaje Individual
  #9 (permalink)  
Antiguo 29/03/2010, 02:13
Avatar de AnesGy
AnesGy
 
Fecha de Ingreso: mayo-2009
Mensajes: 518
Antigüedad: 15 años
Puntos: 19
Respuesta: Calcular números decimales a bases elevadas

En mi código hay un % que no se muestra, no se por qué, por algún motivo el parser de este foro lo traduce por su representación HTML. El operador % devuelve el módulo o resto de la división. Me parecía raro que te salieran decimales porque mi código sólo funciona con integers, por eso pense que era otro XD.

Aparentemente no vi el fallo.

De todos modos, creo haber visto tu fallo, yo $num es un número no una cadena, y luego que una función diga $n=70 sólo indica que el parámetro es opcional y que si no se proporciona dicho parámetro se sobreentendrá 70, no que tengas que poner $n=39.

Código:
echo base_enesimal(6220737792000,39);
Te pongo el código completo sin la etiqueta esa del enhancer porque mete carácteres extraños:

Código:
function base_enesimal($num,$n=70){ //Esto es una función que pasa el número $num
 //a la base enesimal (siendo el valor por defecto $n=70.
 $result = "";
 while($num > 0){
  $result = ($num%$n).",".$result;//Esto añade el carácter seguido de una , al inicio de la cadena
  $num = intval($num/$n); //Esto modifica el número que usamos para quitar el carácter que hemos extraido.
 }
 return substr($result,0,-1); //esto quita la coma que aparecería al final y devuelve el resultado.
}
function enesimal_a_decimal($str,$n=70){
 $result = 0;
 $str = explode(",",$str); //dividimos la cadena en sus carácteres
 $j = count($str);
 for($i=0;$i<$j;$i++){
  $result += intval($str[$i])*pow($n,($j-$i-1)); //esto invierte el algoritmo.
 }
 return $result;
}
echo base_enesimal(6220737792000,39);
De todas maneras, estaba probando tu número y no me daba el valor, eso es porque el número debe estar superando el máximo de longitud del integer, y lo está truncando.
__________________
Si alguna vez parece que soy grosero, pido perdón, es un intento fallido de ser directo.

AnesGy SD. Name it, Get it

Última edición por AnesGy; 29/03/2010 a las 02:25