JavaScript 将分数化简为最简形式
如果分子和分母之间没有公共因子(除了1),则分数被化简。例如,4/6没有被化简,因为4和6都有2作为因子。如果不恰当的分数可以转化为整数,使用JavaScript有两种可能的方法来化简分数:
- 使用math.js的simplify()函数
- 使用JavaScript的_.reduce()函数
以下示例将说明这两种方法:
使用math.js的simplify()函数
在这个函数中,应用了一些规则到表达式中,你可以根据自己的需求创建自定义规则。基本上,这个函数就像一个lambda函数,在其中可以制定规则。
程序:
// main function
function simplify(str) {
var result = '', data = str.split('/'),
numOne = Number(data[0]),
numTwo = Number(data[1]);
for (var i = Math.max(numOne, numTwo); i > 1; i--) {
if ((numOne % i == 0) && (numTwo % i == 0)) {
numOne /= i;
numTwo /= i;
}
}
if (numTwo === 1) {
result = numOne.toString()
} else {
result = numOne.toString() + '/' + numTwo.toString()
}
return result
}
console.log(simplify("4/6"));
console.log(simplify(84810,985612));
输出:
2/3
42405/492806
使用JavaScript的_.reduce()
函数
_.reduce()
是JavaScript中的内置函数,用于将数组/对象的属性转换为单个值,或者用于从给定的值列表创建单个结果。当将列表的所有元素传递给函数/迭代,并且没有更多的元素剩下时,_.each
循环结束。在这里,我们将找到这些数字的最大公约数,除以最大公约数,我们可以使输出更简单。
程序:
// Simplified fraction by finding the GCD and dividing by it.
function reduce(number,denomin){
var gcd = function gcd(a,b){
return b ? gcd(b, a%b) : a;
};
gcd = gcd(number,denomin);
return [number/gcd, denomin/gcd];
}
console.log(reduce(15,20));
console.log(reduce(84810,985612));
输出:
3,4
42405,492806