In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

numberToFraction

Get Adobe Flash player
by quentin 09 Jul 2012
    Embed
/**
 * Copyright quentin ( http://wonderfl.net/user/quentin )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/mmm2
 */

package {
    import flash.text.TextField;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        
        public const PRIMES:Array=[2, 3, 5, 7];
        
        public function FlashTest() {
            log(.1, numberToFraction(.1));
            log(.2, numberToFraction(.2));
            log(.5, numberToFraction(.5));
            log(-2.5, numberToFraction(-2.5));
            log(4.2, numberToFraction(4.2));
            log(14.2, numberToFraction(14.2));
            log(4, numberToFraction(4));
            
            log(0, '----------------------');
            
            log(.1, numberToIntegerFraction(.1));
            log(.2, numberToIntegerFraction(.2));
            log(.5, numberToIntegerFraction(.5));
            log(-2.5, numberToIntegerFraction(-2.5));
            log(4.2, numberToIntegerFraction(4.2));
            log(14.2, numberToIntegerFraction(14.2));
        }
        public var tf:TextField;
        public function log(n:Number, s:String):void {
            if (!tf) {
                tf=new TextField();
                tf.width=stage.stageWidth;
                tf.height=stage.stageHeight;
                addChild(tf);
            }
            tf.appendText(n+' =\t'+s+'\n');
        }

        public function numberToFraction(n:Number):String {
            
            if (int(n)==n) return n.toString();
            
            var top:int=n*100;
            var bottom:int=100;
            
            var didSomething:Boolean;
            var i:int;
            var v:int;
            
            do {
                didSomething=false;
                for (i=0; i<PRIMES.length; i++) {
                    v=PRIMES[i];
                    if (top%v==0 && bottom%v==0) {
                        top/=v;
                        bottom/=v;
                        didSomething=true;
                    }
                }

            } while (didSomething);
            
            return top+'/'+bottom;
        }
        
        public function numberToIntegerFraction(n:Number):String {
            if (Math.abs(int(n))>0) {
                var integer:int=int(n);
                return integer+' '+numberToFraction(n-integer);
            }
            return numberToFraction(n);
        }

    }
}