diciamo che abbiamo frazione 2/4, può essere ridotta a 1/2. C'è una funzione javascript che può ridurre?C'è una funzione javascript che riduce una frazione
risposta
// 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]
No, ma puoi scriverne uno abbastanza facilmente. Essenzialmente, è necessario dividere le parti superiore e inferiore della frazione con il loro "più grande comune denominatore" ... che è possibile calcolare dall'algoritmo di Euclide.
Leggi qui per ulteriori informazioni: http://www.jimloy.com/number/euclids.htm
edit:
codice (perché tutti sembrano essere farlo, questo non fa uso di ricorsione però)
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 per la gestione del numeratore> denominatore – Phrogz
Per ridurre una frazione, dividere il numeratore e il denominatore per il più grande fattore comune. Phrogz e David hanno già fornito il codice sorgente.
Tuttavia, se stai cercando librerie javascript per la gestione delle frazioni, ecco alcuni tra cui scegliere.
Ecco un esempio di utilizzo 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.
Utile, grazie. Ho postato una domanda per chiedere l'efficienza relativa di queste librerie qui: http: // stackoverflow.it/questions/15840390/what-is-the-most-efficient-fraction-library-in-javascript? noredirect = 1 # comment22538987_15840390 – Omn
@Omn Quindi hai già definito la performance utilizzando jsperf.com? Se vedi problemi con Ratio.js quando apri un ticket e cercherò di risolverlo. https://github.com/LarryBattle/Ratio.js –
Non ho esperienza nella creazione e nell'esecuzione di benchmark. Ho finito per entrare nel codice e osservare ciò che sembrava avere una migliore codifica, commenti e funzioni implementate. Ho finito con Ratio.js ma non ho avuto la possibilità di lavorare su quel progetto da allora. Ti farò sicuramente sapere se trovo dei problemi e potrei solo contribuire con le correzioni dei bug se riesco a vedere il problema da solo. – Omn
So che c'è già una risposta, ma voglio condividere una libreria JS che ho trovato quando stavo cercando qualcosa da numeri decimali convertire in frazioni e riducendo frazioni.
La biblioteca chiama Fraction.js, che è stato davvero utile per me e mi ha risparmiato molto tempo e lavoro. Spero che possa essere molto utile a qualcun altro!
Ecco una funzione ricorsiva che utilizza ECMAScript 6 riduci. Funziona per la maggior parte delle frazioni purché il resto non sia troppo piccolo. 0 è stato ridefinito per farlo funzionare con array come [1.2, 2.4, 12, 24]. Ho eseguito il test su Chrome e IE Edge in modo che si possa comportare diversamente con altri browser o aggiornamenti. Quindi dovrebbe funzionare con una serie di 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();
Ricerca per riduzione MDN o ulteriori informazioni here.
- 1. Semplificare una frazione
- 2. Come semplificare una frazione
- 3. Ascoltare una funzione che si chiami JavaScript
- 4. conserva solo una frazione di RDD
- 5. Un pixel CSS può essere una frazione?
- 6. Inject javascript in una funzione javascript
- 7. Concatenare una funzione in JavaScript?
- 8. JavaScript - Come si chiama una funzione all'interno di una funzione?
- 9. Aggiungere a una funzione javascript
- 10. Looping di una funzione JavaScript
- 11. Chiamare una funzione JavaScript preload()?
- 12. approccio newbie: che cos'è una funzione di callback javascript?
- 13. Uccidere una funzione JavaScript che viene eseguito infinita
- 14. È possibile che Javascript abbia una funzione come testo?
- 15. Che cos'è un semplice esempio di una funzione javascript asincrona?
- 16. È vero che ogni funzione in JavaScript è una chiusura?
- 17. Convertire una frazione di testo in un decimale
- 18. Ottenere numeratore e denominatore di una frazione in R
- 19. Che differenza c'è in JavaScript tra una funzione di costruzione e una funzione che restituisce un oggetto invocato come costruttore?
- 20. Che cos'è una "Funzione pagina"?
- 21. Una var per funzione in JavaScript?
- 22. Javascript .map() non è una funzione
- 23. Javascript Type Error, non è una funzione
- 24. Come chiamo una funzione Javascript da Python?
- 25. JavaScript setTimeout setInterval all'interno di una funzione
- 26. Sostituisci funzione funziona solo una volta (javascript)
- 27. Errore Javascript: "val.match non è una funzione"
- 28. Oggetti JavaScript: "addEventListener non è una funzione"
- 29. distrugge una funzione in javascript (jquery)
- 30. Come trasformare una stringa in una chiamata di funzione JavaScript?
Questa è una funzione 'gcd' molto elegante. L'unico cambiamento che suggerirei è una qualche forma di controllo degli input per 'NaN' dato che' gcd (NaN, 1) 'produce' 1' dove mi aspetterei 'NaN' o un errore. – zzzzBov
@zzzzBov Un caso limite interessante. Certamente si potrebbe aggiungere 'if (isNaN (numeratore) || isNaN (denominatore)) return NaN;' come prima riga. – Phrogz
divertente, questa soluzione utilizza l'algoritmo di Euclide per trovare GCD: https://en.wikipedia.org/wiki/Euclidean_algorithm – camou