如何在Javascript中减少负分数



我看过这个问题,但它不适用于负数或带有(+(前缀的数字。

这是我想要的。

-20/8 = -5/2  
+28/-6 = -14/3  
-30/-4 = 15/2  
34/12 = 17/6
+40/6 = 20/3
32/+64 = 1/2

感谢@Bravo,我得到了这段有效的代码!

function reduce(num, den) {
if (num.startsWith("+")) {
num = num.substring(1);
}
if (den.startsWith("+")) {
den = den.substring(1);
}
const neg = num < 0 != den < 0;
num = Math.abs(num);
den = Math.abs(den);
var gcd = function gcd(a, b) {
return !b ? a : gcd(b, a % b);
};
var g = gcd(num, den);
return [neg ? "-" + num / g : num / g, den / g];
}

它的效果和预期的一样好。

尝试使用该代码:

function reduce(numerator,denominator,toString=false){
var gcd = function gcd(a,b){
return b ? gcd(b, a%b) : a;
};
gcd = gcd(numerator,denominator);
var temp_num = numerator / gcd;
var temp_deno= denominator / gcd;
if(temp_deno < 0 ){
temp_deno *= -1;
temp_num *= -1;
}
var result = [temp_num, temp_deno];
if(toString){
return result.toString().replace(',','/');
}
return result;
}
// Test : true for returning string
console.log(reduce(-20,8,true));    //-5/2  
console.log(reduce(+28,-6,true));   //-14/3 
console.log(reduce(-30,-4,true));   //15/2
console.log(reduce(34,12,true));    //17/6
console.log(reduce(+40,6,true));    //20/3
console.log(reduce(32,+64,true));   //1/2

最新更新