분수 2/4를 가지고 있다고 가정하면 1/2로 줄일 수 있습니다. 감소시킬 수있는 자바 스크립트 기능이 있습니까?분수를 줄이는 자바 스크립트 함수가 있습니까
답변
// 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));
분자를 처리하기 위해 +1> 분모 – Phrogz
으로 분수를 줄이고 분자와 분모를 가장 큰 공통 인자로 나눕니다. Phrogz와 David는 이미 소스 코드를 제공했습니다.
그러나 분수를 처리하는 자바 스크립트 라이브러리를 검색하는 경우 선택할 수있는 몇 가지 항목이 있습니다.
- 여기 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.
감사합니다. 나는이 라이브러리의 상대적 효율성에 대해 묻는 질문을 게시했다 : http : // stackoverflow.com/questions/15840390/what-is-the-the-most-efficient-fraction-library-in-javascript? noredirect = 1 # comment22538987_15840390 – Omn
@ 옥션 그래서 jsperf.com을 사용하여 이미 성능을 프로파일 링 했습니까? Ratio.js에 티켓을 열었을 때 문제가 발생하면이를 고치겠습니다. https://github.com/LarryBattle/Ratio.js –
벤치 마크를 작성하고 실행 한 경험이 없습니다. 필자는 결국 코드에 들어가 코딩, 주석 및 구현 된 기능이 개선 된 것만 보았습니다. Ratio.js는 끝났지 만 그 이후로 그 프로젝트에 많은 시간을 할애 할 기회가 없었습니다. 문제를 발견하면 알려 드리겠습니다. 문제가 직접 보이면 버그 수정에 도움이 될 수 있습니다. – Omn
나는 대답이 이미 알고,하지만 난 분수 및 감소 분수에 변환 진수 뭔가를 찾고 때 내가 발견 JS 라이브러리를 공유 할 수 있습니다.
라이브러리는 Fraction.js을 호출합니다.이 라이브러리는 나에게 많은 도움이되었고 많은 시간과 노력을 절약 해주었습니다. 다른 사람에게 유용 할 수 있기를 바랍니다.
다음은 ECMAScript 6 reduce를 사용하는 재귀 함수입니다. 나머지가 너무 작지 않은 한 대부분의 분수에서 작동합니다. 0은 [1.2, 2.4, 12, 24]와 같은 배열에서 작동하도록 재정의되었습니다. Chrome과 IE Edge에서 테스트를했기 때문에 다른 브라우저 나 업그레이드에서 다르게 동작 할 수 있습니다. 그래서 그것은 수레 배열로 작동해야합니다.
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 검색 자세한 정보 here.
- 1. 자바 스크립트 함수가 함수가 아닙니다.
- 2. 자바 스크립트 함수가 호출되지 않습니다.
- 3. 자바 스크립트 : 자바 스크립트
- 4. 어떻게 자바 스크립트 함수가 호출되는지 알고 싶습니까?
- 5. 자바 스크립트 함수가 코드 뒤에서 실행되지 않습니다.
- 6. 아약스와 php로 자바 스크립트 함수가 작동하지 않습니다.
- 7. jQuery에서 자바 스크립트 함수가 호출되지 않았습니다. $ .submit
- 8. 자바 스크립트 오류 : "val.match가 함수가 아닙니다."
- 9. 자바 스크립트 AJAX 함수가 제대로 작동하지 않습니다.
- 10. 자바 스크립트 setInterval 함수가 작동하지 않습니다.
- 11. 자바 스크립트 오류 : "data.getElementsByTagName은 (는) 함수가 아닙니다."
- 12. 자바 스크립트 문자열 변수에 대한 getElementsByTagName() 함수가 있습니까?
- 13. 자바 스크립트에 속성이있는 함수가 있습니까?
- 14. 자바 스크립트 문제가 있습니까?
- 15. ~ 자바 스크립트
- 16. 자바 스크립트
- 17. 비동기 자바 스크립트 함수가 반환 될 때까지 대기
- 18. 자바 스크립트 개체의 toString 함수가 지역화의 영향을 받습니까?
- 19. 유닛 테스트 중에 특정 자바 스크립트 함수가 호출되었는지 확인하는 방법
- 20. 델파이의 자바 스크립트 : [Something]이 (가) 함수가 아닙니다.
- 21. float 문제 : 분수를 반환하지 않습니다.
- 22. 자바 스크립트 getTime()이 함수가 아닌 이유는 무엇입니까?
- 23. 자바 스크립트 함수가 호출되지 않습니다 - ASP.NET 및 UpdatePanel
- 24. 정적 파싱 : 두 개의 자바 스크립트 함수가 같은지 확인하십시오.
- 25. 자바 스크립트 함수가 onSubmit과 함께 호출 될 때 작동하지 않습니다.
- 26. 자바 스크립트 입력 필드 onchange가 "함수가 아닙니다"를 발생시킵니다.
- 27. 어떻게 두 개의 정적 함수가 동일하거나 아닌지 자바 스크립트
- 28. 자바 스크립트 오류 - SXBB [id] .resize가 함수가 아닙니다.
- 29. 자바 스크립트 함수가 onclick 페이지 대신 onload에 자동으로 호출합니다.
- 30. 자바 스크립트 함수가 hx의 onclick을 호출하지 못합니다 : commandExButton
매우 우아한'gcd' 함수입니다. 내가 제안 할 유일한 변화는'NaN'에 대한 입력 검사의 형태로서'gcd (NaN, 1)'이'NaN'이나 에러를 예상 할 때'1'을 생성한다는 것입니다. – zzzzBov
@zzzzBov 흥미로운 엣지 케이스. 물론 if (isNaN (numerator) || isNaN (denominator))가 첫 번째 행으로 NaN;을 반환 할 수 있습니다. – Phrogz
재미있는 사실,이 솔루션은 유클리드의 알고리즘을 사용하여 GCD를 찾습니다. https://en.wikipedia.org/wiki/Euclidean_algorithm – camou