Questo è l'algoritmo:

codice:
function binarioNonIntero(base, daConvertire, cifreRappresentazione)
{
	stringaFinale = "";
	// Determinazione dell'esponente:
	esponente = 1;
	tempPerEsponente = daConvertire;
	while(parseInt(tempPerEsponente) == 0)
	{
		tempPerEsponente = base * tempPerEsponente;
		esponente--;
	}
	// Determinazione cifre
	cifreNumero = new array();
	i = 0;
	while(i != cifreRappresentazione)
	{
		cifreNumero.push(parseInt(daConvertire));
		daConvertire = base * (daConvertire - parseInt(daConvertire));
		i++;
	}
	for(z = i; z >= 0; z--)
	{
		stringaFinale += cifreNumero[z];
	}
	stringaFinale = stringaFinale.substr(1, cifreRappresentazione);
	return "0." + stringaFinale + " * " + base + "(" + esponente + ")";
}
Quando richiami la funzione passi i seguenti parametri:

base: La base nella quale vuoi convertire il numero.
daConvertire: Il numero non intero tra 0 e 1 (non compresi ovviamente) che vuoi convertire.
cifreRappresentazione: Il numero delle cifre che costituiscono il numero che voui veder rappresentate. Questo perchè a seconda del numero che vuoi convertire, la rappresentazione in base potrebbe risultare non finita... (per esempio 0.4 in base 2)

Fai una prova così:
codice:
trace(binarioNonIntero(2, 0.4, 10));
il risultato del trace:

0.011001100 * 2(-1)

Il (-1) indica l'esponente. (non sapevo come metterlo come apice! )