decir que tenemos la fracción 2/4, se puede reducir a 1/2. ¿Hay alguna función de javascript que pueda hacer la reducción?¿Hay una función de Javascript que reduzca una fracción de
Respuesta
// 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, pero puede escribir uno con bastante facilidad. Esencialmente necesitas dividir las partes superior e inferior de la fracción por su "Mayor denominador común" ... que puedes calcular a partir del algoritmo de Euclides.
Lea aquí para obtener más información: http://www.jimloy.com/number/euclids.htm
edición:
código (porque todo el mundo parece estar haciéndolo, esto no quiere utilizar la recursividad aunque)
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 para el manejo del numerador> denominador – Phrogz
Para reduce una fracción, divide el numerador y el denominador por el Factor común más grande. Phrogz y David ya han proporcionado el código fuente ...
Sin embargo, si está buscando bibliotecas de JavaScript para manejar fracciones, estas son algunas para elegir.
Aquí hay un ejemplo usando 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.
Útil, gracias. He publicado una pregunta sobre las eficiencias relativas de estas bibliotecas aquí: http: // stackoverflow.com/questions/15840390/what-is-the-most-efficient-fraction-library-in-javascript? noredirect = 1 # comment22538987_15840390 – Omn
@Omn ¿Ya describió el rendimiento usando jsperf.com? Si ve algún problema con Ratio.js cuando acaba de abrir un ticket, intentaré solucionarlo. https://github.com/LarryBattle/Ratio.js –
No tengo experiencia creando y ejecutando benchmarks. Terminé yendo al código y mirando lo que parecía tener una mejor codificación, comentarios y funciones implementadas. Terminé yendo con Ratio.js pero no he tenido la oportunidad de trabajar en ese proyecto mucho desde entonces. Sin duda, te dejaré saber si encuentro algún problema y solo puedo contribuir con correcciones de errores si puedo ver el problema yo mismo. – Omn
sé que ya hay una respuesta, pero quiero compartir una biblioteca de JS que encontré cuando yo estaba buscando algo para números decimales convertir en fracciones y fracciones reduciendo.
La biblioteca llama al Fraction.js, lo cual fue realmente útil para mí y me ahorró mucho tiempo y trabajo. ¡Espero que pueda ser muy útil para otra persona!
Aquí hay una función recursiva usando ECMAScript 6 reduce. Funciona para la mayoría de las fracciones siempre que el resto no sea demasiado pequeño. 0 se ha redefinido para que funcione en arreglos como [1.2, 2.4, 12, 24]. Probé en Chrome e IE Edge por lo que puede comportarse de manera diferente en otros navegadores o actualizaciones. Por lo tanto, debería funcionar con una serie de flotadores.
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();
Buscar MDN reducir o más información here.
- 1. Simplificar una Fracción
- 2. Cómo simplificar una fracción
- 3. ¿Cómo hacer que una página web móvil no se reduzca?
- 4. ¿Hay una función `printk()` que admita `va_list`?
- 5. ¿Hay una función equivalente de JavaScript o Jquery para dormir?
- 6. Inyectar javascript en una función de Javascript
- 7. Hay una diferencia entre (función() {...}()); y (función() {...})() ;?
- 8. ¿Hay una referencia de función de JavaScript más completa que w3schools?
- 9. ¿Hay una función MAKELONGLONG?
- 10. ¿Hay alguna manera de obtener la sección decimal repetitiva de una fracción en Python?
- 11. Aproximación de fracción decimal a fracción irracional
- 12. ¿Hay una función Sleep/Pause/Wait en JavaScript?
- 13. ¿Hay una función de JavaScript para hacer que Google Chrome irrumpa en el depurador?
- 14. ¿Hay una función R que aplica una función a cada par de columnas?
- 15. ¿Hay una función opuesta a preventDefault() en JavaScript?
- 16. ¿Hay una biblioteca de Cálculo para JavaScript?
- 17. ¿Hay una alerta de JavaScript que no pausa el script?
- 18. ¿Hay una biblioteca de hashmap para JavaScript?
- 19. crear una función javascript programáticamente
- 20. optimizar una función en Javascript
- 21. underscore.js - ¿Hay una función que produce una matriz que es la diferencia de dos matrices?
- 22. ¿Es cada objeto de JavaScript una función?
- 23. ¿Hay alguna manera de hacer columnas de tabla igual a una fracción del ancho total?
- 24. ¿Cómo se convierte una fracción a binaria?
- 25. ¿Hay una función que tome una lista de listas de argumentos y aplique cada lista a una función determinada?
- 26. algoritmo óptimo para calcular el resultado de una fracción continua
- 27. ¿Hay una función hash circular?
- 28. ¿Puede un píxel CSS ser una fracción?
- 29. Java: ¿hay una función de mapa?
- 30. ¿Hay una función de identidad scala?
Es una función 'gcd' muy elegante. El único cambio que sugeriría es alguna forma de comprobación de entrada para 'NaN' como' gcd (NaN, 1) 'produce' 1' donde esperaría 'NaN' o un error. – zzzzBov
@zzzzBov Un caso de borde interesante. Ciertamente, uno podría agregar 'if (isNaN (numerador) || isNaN (denominador)) return NaN;' como la primera línea. – Phrogz
hecho de la diversión, esta solución usa el algoritmo de Euclides para encontrar GCD: https://en.wikipedia.org/wiki/Euclidean_algorithm – camou