Вариант вроде такого неправильный:

Код AS3:
var a:String=String(num);
var l:int=a.length / 3;
var b:String="";
for (var i:int=0; i<l; i++){
b+=b.substr(i*3,3)+" ";
}
Потому что парсит слева-направо. Надо наоборот.
Вариант 2:

Код AS3:
var a:int=num;
var str:String="";
var c:int=0;
while (a){
if (c++ === 3) str=" "+str;
str=String(a%10)+str;
a*=0.1;
}
Вот так мужественно, но расточительно с точки зрения ресурсов... Надо бы отцеплять по 3 разряда и делить разом на 1000, хех...
Вариант 3:

Код AS3:
var a:int=num;
var str:String="";
var c:int=0;
while (a){
if (a >= 1000) a=" "+a;
str=String(a%1000)+str;
a*=0.001;
}
Но как-то пробел добавит спереди, надо ещё хитрее.
Но меня беспокоит производительность. А вдруг число 100000000000000000?
Вот в ByteArray если писать циферки, не думая, а потом считать задом наперед, вот да...
P.S. пол 5 утра, код писался здесь и не тестился. Почти уверен, что нерабочий... Но Вы дерзайте, я вот в Вас верю.