Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. export default class Fraction {
  2.     num: number;
  3.     den: number;
  4.  
  5.     static checkFrac(val: Fraction | number) {
  6.         if (val instanceof Fraction) {
  7.             return val;
  8.         }
  9.         else {
  10.             return new Fraction(val);
  11.         }
  12.     }
  13.  
  14.     constructor(num: number, den?: number) {
  15.         this.num = num;
  16.         this.den = den ? den : 1;
  17.         this.simplify();
  18.     }
  19.  
  20.     simplify() {
  21.         if (this.den < 0) {
  22.             this.den = -this.den;
  23.             this.num = -this.num;
  24.         }
  25.         this.num = Math.round(this.num);
  26.         this.den = Math.round(this.den);
  27.         let numabs = Math.abs(this.num);
  28.         let count = Math.min(numabs, this.den);
  29.         for (let i = 2; count > 1; i++) {
  30.             if ((numabs / i) % 1 === 0 && (this.den / i) % 1 === 0) {
  31.                 count /= i;
  32.                 numabs /= i;
  33.                 this.num /= i;
  34.                 this.den /= i;
  35.                 i--;
  36.             }
  37.             else if((count / i) % 1 === 0){
  38.                 count /= i;
  39.                 i--;
  40.             }
  41.         }
  42.         if (this.num === 0) this.den = 1;
  43.         return this;
  44.     }
  45.  
  46.     add(frac: Fraction | number) {
  47.         frac = Fraction.checkFrac(frac);
  48.         let d = frac.den * this.den;
  49.         let n = frac.num * this.den + this.num * frac.den;
  50.         return new Fraction(n, d);
  51.     }
  52.  
  53.     sub(frac: Fraction | number) {
  54.         frac = Fraction.checkFrac(frac);
  55.         let d = frac.den * this.den;
  56.         let n = this.num * frac.den - frac.num * this.den;
  57.         return new Fraction(n, d);
  58.     }
  59.  
  60.     mult(frac: Fraction | number) {
  61.         frac = Fraction.checkFrac(frac);
  62.         return new Fraction(this.num * frac.num, this.den * frac.den);
  63.     }
  64.  
  65.     div(frac: Fraction | number) {
  66.         frac = Fraction.checkFrac(frac);
  67.         return new Fraction(this.num * frac.den, this.den * frac.num);
  68.     }
  69.  
  70.     eq(frac: Fraction | number) {
  71.         frac = Fraction.checkFrac(frac);
  72.         return frac.num === this.num && frac.den === this.den;
  73.     }
  74.  
  75.     flip() {
  76.         return new Fraction(this.den, this.num);
  77.     }
  78.  
  79.     print() {
  80.         console.log(this.toString())
  81.     }
  82.  
  83.     toString() {
  84.         if (this.den === 1) return `${this.num}`;
  85.         return `${this.num}/${this.den}`;
  86.     }
  87.  
  88.     get isZero() {
  89.         return this.num === 0;
  90.     }
  91.  
  92.     get negative() {
  93.         return this.num < 0;
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement