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.