JSFiddle - React, Tailwind, and code Playground

by hescano

JavaScript

function mixedFraction(s){
  var vals = s.split('/').map(v=>Number(v));
  var g = gcd(vals[0], vals[1]);
    while (g > 1) {
    	vals[0] = vals[0] / g;
      vals[1] = vals[1] / g;
      g = gcd(vals[0], vals[1]);
    }
 
  var m = vals[0] >= 0 ? Math.floor(vals[0] / vals[1]) : Math.ceil(vals[0] / vals[1]);
  var remainder = vals[0] % vals[1];
  var result = "";
  if (remainder !== 0) {
  	result = (m !== 0 ? m + " " : "") + Math.abs(remainder) + "/" + Math.abs(vals[1]);
  } else {
  	result = vals[0] / vals[1];
  }
	return result.toString();
}

function ZeroDivisionError(message) {
  this.name = "ZeroDivisionError";
  this.message = (message || "");
}
ZeroDivisionError.prototype = new Error();
ZeroDivisionError.prototype.constructor = ZeroDivisionError;

function gcd(a, b) {
    if (!b) {
    	return a;
    }
    return gcd(b, a % b);
}

console.log(mixedFraction('-22/-7'))