分数2/4
があるとすると、1/2
に減らすことができます。
削減できるJavaScript関数はありますか?
// 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]
いいえ、でも自分でかなり簡単に書くことができます。基本的に、分数の上部と下部を「最大公約数」で割る必要があります...これはユークリッドのアルゴリズムから計算できます。
詳細については、こちらをお読みください: 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));
分数を減らすには、分子と分母を最大公約数で割ります。 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.
すでに答えがあることは知っていますが、何かを探していたときに見つけたJSライブラリを共有して10進数を分数と分数を減らす。
ライブラリは Fraction.js を呼び出します。これは私にとって本当に役に立ち、多くの時間と作業を節約しました。それが他の誰かに非常に役立つことを願っています!
これは、ECMAScript 6reduceを使用した再帰関数です。余りが小さすぎない限り、ほとんどの分数で機能します。 0は、[1.2、2.4、12、24]のような配列で機能するように再定義されました。 ChromeおよびIE Edgeでテストしたので、他のブラウザーやアップグレードでは動作が異なる可能性があります。したがって、floatの配列で動作するはずです。
Array.prototype.gcd = function () {
if (this.length === 0)
return null;
return this.reduce((prev, curr) => {
if (curr <= 1.00000000001e-12)
return prev
else
return [curr, prev % curr].gcd();
});
}
var reducedValueGCD = [1.2, 2.4, 12, 24, 240].gcd();
MDNリデュースまたは詳細情報を検索 ここ 。
「2/4」のような文字列の端数を減らし、文字列の端数として出力します。
function reduce([numerator, denominator]){
for (let i = numerator; i > 0; i--) {
if(!(numerator % i) && !(denominator % i)){
return [(numerator / i), (denominator / i)];
}
}
}
function reduceFraction(string){
return reduce(string.split('/').map(n => +n)).join('/');
}
one = '2/4';
two = '20/200';
three = '330/2050';
console.log('2/4 reduced to', reduceFraction(one));
console.log('20/200 reduced to', reduceFraction(two));
console.log('330/2050 reduced to', reduceFraction(three));