sagen wir haben Bruch 2/4, kann es auf 1/2 reduziert werden. Gibt es JavaScript-Funktion, die das Reduzieren tun kann?Gibt es eine Javascript-Funktion, die einen Bruch reduziert
Antwort
// 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]
Nein, aber Sie können sich selbst ziemlich leicht schreiben. Im Wesentlichen müssen Sie die oberen und unteren Teile des Bruches durch ihren "größten gemeinsamen Nenner" teilen ... Was Sie aus dem Algorithmus von Euklid berechnen können.
Lesen Sie hier für weitere Informationen: http://www.jimloy.com/number/euclids.htm
edit:
Code
(weil jeder es zu tun scheint, dies allerdings nicht genutzt wird Rekursion)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 für den Umgang mit Zähler> Nenner – Phrogz
zu Reduziere einen Bruch, teile den Zähler und den Nenner durch den größten gemeinsamen Faktor. Phrogz und David haben bereits den Quellcode zur Verfügung gestellt.
Wenn Sie jedoch Javascript Bibliotheken für die Handhabung von Brüchen suchen, dann hier sind ein paar zur Auswahl.
Hier ist ein Beispiel unter Verwendung von 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.
Nützlich, danke. Ich habe eine Frage gestellt, in der Sie nach der relativen Effizienz dieser Bibliotheken gefragt werden: http: // stackoverflow.com/questions/15840390/Was ist die effizienteste Fraktion-Bibliothek in Javascript? noredirect = 1 # comment22538987_15840390 – Omn
@Omn Also haben Sie bereits die Leistung mit jsperf.com Profil? Wenn Sie Probleme mit Ratio.js sehen, wenn Sie einfach ein Ticket öffnen, werde ich versuchen, es zu beheben. https://github.com/LarryBattle/Ratio.js –
Ich habe keine Erfahrung beim Erstellen und Ausführen von Benchmarks. Am Ende ging ich einfach in den Code und schaute auf etwas, das besser zu kodieren, zu kommentieren und Funktionen zu implementieren schien. Ich beendete das Gespräch mit Ratio.js, aber ich hatte seither keine Gelegenheit, an diesem Projekt zu arbeiten. Ich werde Sie sicherlich wissen lassen, wenn ich irgendwelche Probleme finde, und ich kann nur Bugfixes beisteuern, wenn ich das Problem selbst sehen kann. – Omn
Ich weiß, es ist schon eine Antwort, aber ich möchte eine JS-Bibliothek teilen, die ich gefunden, wenn ich etwas zu konvertieren Dezimalzahlen in Fraktionen und Reduktions Fraktionen anschaute.
Die Bibliothek ruft Fraction.js an, was mir sehr geholfen hat und mir viel Zeit und Arbeit erspart hat. Hoffe, dass es für jemand anderen sehr nützlich sein kann!
Hier ist eine rekursive Funktion mit ECMAScript 6 reduzieren. Es funktioniert für die meisten Fraktionen, solange der Rest nicht zu klein ist. 0 wurde neu definiert, damit es für Arrays wie [1.2, 2.4, 12, 24] funktioniert. Ich habe es in Chrome und IE Edge getestet, sodass es sich in anderen Browsern oder Upgrades möglicherweise anders verhält. Es sollte also mit einem Array von Floats funktionieren.
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();
Suche nach MDN reduzieren oder weiteren Informationen here.
- 1. Warum hat C# einen Bruch, wenn es nicht optional ist?
- 2. Schleife, die nicht bis zum Bruch endet
- 3. Gibt es eine Vagrant-Box, die einen Raspberry Pi simuliert?
- 4. Gibt es einen Operator oder eine Funktion?
- 5. Bruch in highchart Generation
- 6. Warum reduziert die Bindung die Liste?
- 7. Gibt es einen Identitätskanal?
- 8. Mutter div Bruch aus
- 9. Gibt es eine Möglichkeit, einen Radiobutton Vorlage, so dass es
- 10. Was die ‚reduziert‘ Funktion macht und wie es
- 11. Wie kann die zyklomatische Komplexität reduziert werden?
- 12. Gibt es eine Abkürzung für die wiederholte Neuzuweisung einer Variablen?
- 13. PYTHON - Eingabe Dezimal zu Bruch
- 14. Reduziert "readonly" (C#) die Speichernutzung?
- 15. Vordefinierte Oracle-DB-Funktion, die den Bruch in Dezimal konvertiert
- 16. Gibt es eine Verknüpfung
- 17. gibt es ein Äquivalent von Java markierten Bruch in C# oder einer Vermeidung des Problems
- 18. Gibt es einen log4net-Speicherappender?
- 19. Gibt es einen boost :: weak_intrusive_pointer?
- 20. Gibt es eine Scheme-Implementierung, die parallelisiert?
- 21. Gibt es eine Möglichkeit, die Vererbung einzuschränken?
- 22. Gibt es einen Vorlagen-Debugger?
- 23. Gibt es einen besseren Austausch?
- 24. Gibt es einen "git find"?
- 25. Parse Fehler beim Versuch, einen Bruch in Flex 3
- 26. Gibt es einen aktualisierten 'vimtutor'?
- 27. Gibt es einen gepufferten ObjectInputStream?
- 28. Gibt es einen unterhaltsamen Reiseführer?
- 29. Gibt es einen IPMI-Simulator?
- 30. Gibt es einen NHibernate Killer?
Das ist eine sehr elegante 'gcd' Funktion. Die einzige Änderung, die ich vorschlagen würde, ist eine Form der Eingangsüberprüfung für 'NaN', da' gcd (NaN, 1) '' 1' erzeugt, wo ich 'NaN' oder einen Fehler erwarten würde. – zzzzBov
@zzzzBov Ein interessanter Randfall. Gewiss könnte man 'if (isNaN (Zähler) || isNaN (Nenner)) addieren NaN;' als erste Zeile. – Phrogz
Spaß Tatsache, diese Lösung verwendet Euklid-Algorithmus, um GCD zu finden: https://en.wikipedia.org/wiki/Euclidean_algorithm – camou