Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package libTF.utils
- {
- import adobe.utils.CustomActions;
- public class Fraction
- {
- internal var numerator:uint;
- internal var denomenator:uint;
- internal var pos:Boolean;
- public var value:Number;
- public function Fraction(num:uint, denom:uint, positive:Boolean)
- {
- numerator = num;
- denomenator = denom;
- pos = positive;
- simplify();
- }
- public function gcf(val1:uint, val2:uint):int
- {
- var numfact:Vector.<uint> = MathUtils.primeFactors(val1);
- var denomfact:Vector.<uint> = MathUtils.primeFactors(val2);
- var val:int = 1;
- for (var i:int = numfact.length - 1; i >= 0; i--)
- {
- for (var j:int = denomfact.length - 1; j >= 0; j--)
- {
- if (numfact[i] == denomfact[j])
- {
- val *= numfact[i];
- numfact.splice(i, 1);
- denomfact.splice(j, 1);
- break;
- }
- }
- }
- return val;
- }
- public function simplify():Fraction
- {
- var factor:uint = gcf(numerator,denomenator);
- numerator /= factor;
- denomenator /= factor;
- cacheValue();
- return this;
- }
- public function addFract(val:Fraction):Fraction
- {
- numerator = numerator * val.denomenator + val.numerator * denomenator;
- denomenator = denomenator * val.denomenator;
- pos = (value + val.value >= 0);
- return simplify();
- }
- public function subFract(val:Fraction):Fraction
- {
- numerator = numerator * val.denomenator - val.numerator * denomenator;
- denomenator = denomenator * val.denomenator;
- pos = (value - val.value >= 0);
- return simplify();
- }
- public function multFract(val:Fraction):Fraction
- {
- numerator *= val.numerator;
- denomenator *= val.denomenator;
- pos = (pos == val.pos);
- return simplify();
- }
- public function divFract(val:Fraction):Fraction
- {
- numerator *= val.denomenator;
- denomenator *= val.numerator;
- pos = (pos == val.pos);
- return simplify();
- }
- public function addInt(val:int):Fraction
- {
- numerator += denomenator * val;
- pos = (value + val >= 0);
- return simplify();
- }
- public function subInt(val:int):Fraction
- {
- numerator -= denomenator * val;
- pos = (value - val >= 0);
- return simplify();
- }
- public function multInt(val:int):Fraction
- {
- numerator *= val;
- pos = (pos == (val >= 0));
- return simplify();
- }
- public function divInt(val:int):Fraction
- {
- denomenator *= val;
- pos = (pos == (val >= 0));
- return simplify();
- }
- public function reciprocal():Fraction
- {
- return (new Fraction(denomenator, numerator, pos));
- }
- public function fracPart():Fraction
- {
- var part:Fraction = clone();
- part.numerator %= part.denomenator
- return part;
- }
- public function abs():Fraction
- {
- pos = true;
- return (simplify());
- }
- public function cacheValue():Number
- {
- value = (pos?1: -1) * Number(numerator) / Number(denomenator);
- return value;
- }
- public function toString():String
- {
- return ((pos?"":"-") + String(numerator) + "/" + String(denomenator));
- }
- public function toMixedNum():String
- {
- return(String(int(value)) + " and " + fracPart().abs());
- }
- public function clone():Fraction
- {
- return new Fraction(numerator, denomenator, pos);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement