Quiero convertir todos los números con una precisión de 0,25redondeo al más cercano 0.25 javascript
Entonces ...
5 becomes 5.00
2.25 becomes 2.25
4 becomes 4.00
3.5 becomes 3.50
Gracias
Quiero convertir todos los números con una precisión de 0,25redondeo al más cercano 0.25 javascript
Entonces ...
5 becomes 5.00
2.25 becomes 2.25
4 becomes 4.00
3.5 becomes 3.50
Gracias
Aquí es una implementación de lo rslite dijo:
var number = 5.12345;
number = (Math.round(number * 4)/4).toFixed(2);
Multiplicar por 4, redondo a un entero, se divide por 4 y formatee con dos decimales.
Editar ¿Alguna razón para los downvotes? Al menos deja un comentario para saber qué debería mejorarse.
Si la velocidad es su preocupación, tenga en cuenta que usted puede conseguir una mejora de velocidad de 30% mediante el uso de:
var nearest = 4;
var rounded = number + nearest/2 - (number+nearest/2) % nearest;
de mi página web: http://phrogz.net/round-to-nearest-via-modulus-division
Las pruebas de rendimiento aquí: http://jsperf.com/round-to-nearest
Gran respuesta ... Cambiar a esto si tienes números negativos var redondeado = número + más cercano/2 - Math.abs ((número + más cercano/2)% más cercano); – Lenny
@Lenny Pero tenga en cuenta que cuando lo hace, está invocando una llamada a función ('Math.abs') y perderá el beneficio de velocidad. – Phrogz
una muy buena aproximación para el ro INANCIACIÓN:
function Rounding (number, precision){
var newNumber;
var sNumber = number.toString();
var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;
if (number < 0)
newNumber = (number - 5 * Math.pow(10,-increase));
else
newNumber = (number + 5 * Math.pow(10,-increase));
var multiple = Math.pow(10,precision);
return Math.round(newNumber * multiple)/multiple;
}
¿Cómo es esto mejor que las otras respuestas? Los otros parecen mucho más cortos. (Podría analizar el código para tratar de descubrir qué ventaja tiene, pero es más rápido preguntar.^_ ^) – Venryx
Aquí es @ respuesta de Gumbo en forma de una función:
var roundNearQtr = function(number) {
return (Math.round(number * 4)/4).toFixed(2);
};
Ahora puede hacer llamadas:
roundNearQtr(5.12345); // 5.00
roundNearQtr(3.23); // 3.25
roundNearQtr(3.13); // 3.25
roundNearQtr(3.1247); // 3.00
Aquí es una función genérica que hacer redondeo. En los ejemplos anteriores, se utilizó 4 porque está en el inverso de .25. Esta función le permite al usuario ignorar ese detalle. Actualmente no es compatible con la precisión preestablecida, pero se puede agregar fácilmente.
function roundToNearest(numToRound, numToRoundTo) {
numToRoundTo = 1/(numToRoundTo);
return Math.round(numToRound * numToRoundTo)/numToRoundTo;
}
Esto requiere una operación adicional que 'Math.round (num/multiple) * multiple;'. * Sin embargo *, es mi versión preferida por una razón importante: no da resultados como "0.3000000000000004" para 'Round (.2 + .1, .1)'. – Venryx
uso por debajo de la función, creo que sirve
function roundByQuarter(value) {
var inv = 1.0/0.25;
return Math.round(value * inv)/inv;
}
Llame a la función como abajo, dará como resultado el valor barrio más cercano, es decir que no volverá 0.32, 0.89, 0.56, pero lo hará devuelve .25, .75, .50 decimales solamente.
roundByQuarter(2.74) = 2.75
roundByQuarter(2.34) = 2.25
roundByQuarter(2.94) = 3.00
roundByQuarter(2.24) = 2.25
function roundToInc(num, inc) {
const diff = num % inc;
return diff>inc/2?(num-diff+inc):num-diff;
}
> roundToInc(233223.2342343, 0.01)
233223.23
> roundToInc(505, 5)
505
> roundToInc(507, 5)
505
> roundToInc(508, 5)
510
ningún intento en su final? – random
Esta pregunta no parece tener sentido. Todos sus números se están convirtiendo en sí mismos, no se está redondeando. – Barmar