// print some floats as fractions
printFraction(0.5);
printFraction(0.75);
printFraction(0.48);
// try something a little more complex
var float:Number = 0.98765432;
trace("na more complex example:");
printFraction(float);
var frac:Array = asFraction(float);
trace("double check it:");
trace(frac[0] + "/" + frac[1] +" = " + frac[0] / frac[1]);
/* outputs:
0.5 = 1/2
0.75 = 3/4
0.48 = 12/25
a more complex example:
0.98765432 = 12345679/12500000
double check it:
12345679/12500000 = 0.98765432
*/
function printFraction(n:Number):void{
var frac:Array = asFraction(n);
trace(n + " = " + frac[0] + "/" + frac[1]);
}
// takes any value less than one and returns an array
// with the numerator at index 0 and the denominator at index 1
function asFraction(num:Number):Array{
var decimalPlaces:int = num.toString().split(".")[1].length;
var denom:Number = Math.pow(10, decimalPlaces);
return reduceFraction(num * denom, denom);
}
// divide the numerator and denominator by the GCF
function reduceFraction(numerator:int, denominator:Number):Array{
// divide by the greatest common factor
var divisor:int = gcf(numerator, denominator);
if (divisor){
numerator /= divisor;
denominator /= divisor;
}
return [numerator, denominator];
}
// get the greatest common factor of two integers
function gcf(a:int, b:int):int{
var remainder:int;
var factor:Number = 0;
var maxIter:int = 100;
var i:int = 0;
while (1){
if (b > a){
var swap:int = a;
a = b;
b = swap;
}
remainder = a % b;
a = b;
b = remainder
if (remainder == 0){
factor = a;
break;
}else if (remainder==1){
break;
}else if (i > maxIter){
trace("failed to calculate gcf");
break;
}
i++;
}
return factor;
}
This snippet contains a few functions for calculating fractions based on float values. Writing this brought back some memories from grade school math.

