dav*_*ave 39 javascript function fractions
说我们有2/4分数,它可以减少到1/2.有没有可以减少的javascript函数?
Phr*_*ogz 75
// Reduce a fraction by finding the Greatest Common Divisor and dividing by it.
function reduce(numerator,denominator){
var gcd = function gcd(a,b){
return b ? gcd(b, a%b) : a;
};
gcd = gcd(numerator,denominator);
return [numerator/gcd, denominator/gcd];
}
reduce(2,4);
// [1,2]
reduce(13427,3413358);
// [463,117702]
Run Code Online (Sandbox Code Playgroud)
dav*_*vid 10
不,但你可以很容易地自己写一个.基本上你需要将分数的顶部和底部除以它们的"最大公分母"......你可以从欧几里德的算法中计算出来.
请阅读此处了解更多信息:http://www.jimloy.com/number/euclids.htm
编辑:
代码(因为每个人似乎都在这样做,但这不使用递归)
var FractionReduce = (function(){
//Euclid's Algorithm
var getGCD = function(n, d){
var numerator = (n<d)?n:d;
var denominator = (n<d)?d:n;
var remainder = numerator;
var lastRemainder = numerator;
while (true){
lastRemainder = remainder;
remainder = denominator % numerator;
if (remainder === 0){
break;
}
denominator = numerator;
numerator = remainder;
}
if(lastRemainder){
return lastRemainder;
}
};
var reduce = function(n, d){
var gcd = getGCD(n, d);
return [n/gcd, d/gcd];
};
return {
getGCD:getGCD,
reduce:reduce
};
}());
alert(FractionReduce.reduce(3413358, 13427));
Run Code Online (Sandbox Code Playgroud)
我知道这是一篇旧文章,但我将接受的答案转换为循环解决方案而不是递归函数。这将提高内存效率并且可能更快(不需要内存堆栈操作和执行调用)。
function reduce(numerator, denominator) {
var a = numerator;
var b = denominator;
var c;
while (b) {
c = a % b; a = b; b = c;
}
return [numerator / a, denominator / a];
}
Run Code Online (Sandbox Code Playgroud)
内存占用只有 5 个数字结构和一个简单的循环。
要减少分数,请将分子和分母除以最大公因数.Phrogz和David已经提供了源代码..
但是,如果您正在搜索用于处理分数的JavaScript库,那么这里有一些可供选择.
这是使用Ratio.js的示例.
var a = Ratio(2,4);
a.toString() == "2/4";
a.simplify().toString() == "1/2"; // reduce() returns a clone of the Ratio()
a.toString() == "2/4"; // Ratio functions are non-destructive.
Run Code Online (Sandbox Code Playgroud)