round redondear quitar number hacia float decimals decimales arriba javascript rounding

redondear - ¿Cómo redondeas al primer decimal en Javascript?



parsefloat javascript 2 decimales (19)

ES 6 Versión de respuesta aceptada:

function round(value, precision) { const multiplier = 10 ** (precision || 0); return Math.round(value * multiplier) / multiplier; }

¿Puede redondear un número en javascript a 1 carácter después del punto decimal (correctamente redondeado)?

Probé el * 10, round, / 10 pero deja dos decimales al final del int.


En general, el redondeo se realiza escalando: round(num / p) * p

Usar la notación exponencial maneja el redondeo de números + ve, correctamente. Sin embargo, este método no puede redondear los casos de borde correctamente.

function round(num, precision = 2) { var scaled = Math.round(num + "e" + precision); return Number(scaled + "e" + -precision); } // testing some edge cases console.log( round(1.005, 2) ); // 1.01 correct console.log( round(2.175, 2) ); // 2.18 correct console.log( round(5.015, 2) ); // 5.02 correct console.log( round(-1.005, 2) ); // -1 wrong console.log( round(-2.175, 2) ); // -2.17 wrong console.log( round(-5.015, 2) ); // -5.01 wrong

Aquí, también hay una función que escribí para hacer el redondeo aritmético, puedes probarlo tú mismo.

/** * MidpointRounding away from zero (''arithmetic'' rounding) * Uses a half-epsilon for correction. (This offsets IEEE-754 * half-to-even rounding that was applied at the edge cases). */ function RoundCorrect(num, precision = 2) { // half epsilon to correct edge cases. var c = 0.5 * Number.EPSILON * num; // var p = Math.pow(10, precision); //slow var p = 1; while (precision--> 0) p *= 10; if (num < 0) p *= -1; return Math.round((num + c) * p) / p; } // testing some edge cases console.log(RoundCorrect(1.005, 2)); // 1.01 correct console.log(RoundCorrect(2.175, 2)); // 2.18 correct console.log(RoundCorrect(5.015, 2)); // 5.02 correct console.log(RoundCorrect(-1.005, 2)); // -1.01 correct console.log(RoundCorrect(-2.175, 2)); // -2.18 correct console.log(RoundCorrect(-5.015, 2)); // -5.02 correct


Encontré una manera de evitar los problemas de precisión:

function badRound (num, precision) { const x = 10 ** precision; return Math.round(num * x) / x } // badRound(1.005, 2) --> 1 function round (num, precision) { const x = 10 ** (precision + 1); const y = 10 ** precision; return Math.round(Math.round(num * x) / 10) / y } // round(1.005, 2) --> 1.01


Esto parece funcionar de manera confiable a través de cualquier cosa que le lance:

function round(val, multiplesOf) { var s = 1 / multiplesOf; var res = Math.ceil(val*s)/s; res = res < val ? res + multiplesOf: res; var afterZero = multiplesOf.toString().split(".")[1]; return parseFloat(res.toFixed(afterZero ? afterZero.length : 0)); }

Se redondea, por lo que es posible que deba modificarlo según el caso de uso. Esto debería funcionar:

console.log(round(10.01, 1)); //outputs 11 console.log(round(10.01, 0.1)); //outputs 10.1


Hice uno que devuelve el tipo de número y también coloca decimales solo si son necesarios (sin relleno 0).

Ejemplos:

roundWithMaxPrecision(11.234, 2); //11.23 roundWithMaxPrecision(11.234, 1); //11.2 roundWithMaxPrecision(11.234, 4); //11.23 roundWithMaxPrecision(11.234, -1); //10 roundWithMaxPrecision(4.2, 2); //4.2 roundWithMaxPrecision(4.88, 1); //4.9

El código:

function roundWithMaxPrecision (n, precision) { return Math.round(n * Math.pow(10, precision)) / Math.pow(10, precision); }


Intenta con esto:

var original=28.453 // 1.- round "original" to two decimals var result = Math.round (original * 100) / 100 //returns 28.45 // 2.- round "original" to 1 decimal var result = Math.round (original * 10) / 10 //returns 28.5 // 3.- round 8.111111 to 3 decimals var result = Math.round (8.111111 * 1000) / 1000 //returns 8.111

Menos complicado y más fácil de implementar ...

Con esto, puedes crear una función para hacer:

function RoundAndFix (n, d) { var m = Math.pow (10, d); return Math.round (n * m) / m; }

function RoundAndFix (n, d) { var m = Math.pow (10, d); return Math.round (n * m) / m; } console.log (RoundAndFix(8.111111, 3));

EDITAR : ver este Cómo redondear utilizando la MITAD REDONDO. Modo de redondeo que la mayoría de nosotros aprendimos en la escuela primaria


Para completar la mejor respuesta:

var round = function ( number, precision ) { precision = precision || 0; return parseFloat( parseFloat( number ).toFixed( precision ) ); }

El número de parámetro de entrada puede "no" ser siempre un número, en este caso .toFixed no existe.


Poco filtro angular si alguien lo quiere:

angular.module(''filters'').filter(''decimalPlace'', function() { return function(num, precision) { var multiplier = Math.pow(10, precision || 0); return Math.round(num * multiplier) / multiplier; }; });

utilizar si a través de:

{{model.value| decimalPlace}} {{model.value| decimalPlace:1}} {{model.value| decimalPlace:2}}

:)


Si su método no funciona, por favor publique su código.

Sin embargo, podría realizar la tarea de redondeo como:

var value = Math.round(234.567*100)/100

Te daré 234.56

similar

var value = Math.round(234.567*10)/10

Dara 234.5

De esta manera, puede usar una variable en lugar de la constante como se usó anteriormente.


Si te interesa el redondeo adecuado entonces:

function roundNumericStrings(str , numOfDecPlacesRequired){ var roundFactor = Math.pow(10, numOfDecPlacesRequired); return (Math.round(parseFloat(str)*roundFactor)/roundFactor).toString(); }

Si no, entonces ya tienes una respuesta de publicaciones anteriores.

str.slice(0, -1)


Si usas Math.round(5.01) obtendrás 5 lugar de 5.0 .

Si usas a toFixed te encuentras con issues rounding .

Si quieres lo mejor de ambos mundos combina los dos:

(Math.round(5.01 * 10) / 10).toFixed(1)

Es posible que desee crear una función para esto:

function roundedToFixed(_float, _digits){ var rounder = Math.pow(10, _digits); return (Math.round(_float * rounder) / rounder).toFixed(_digits); }


Yo voto por toFixed() , pero, para el registro, aquí hay otra manera que usa el desplazamiento de bits para convertir el número a un int. Por lo tanto, siempre se redondea hacia cero (hacia abajo para números positivos, para negativos).

var rounded = ((num * 10) << 0) * 0.1;

Pero bueno, ya que no hay llamadas a funciones, es muy rápido. :)

Y aquí hay uno que utiliza la coincidencia de cadenas:

var rounded = (num + '''').replace(/(^.*?/d+)(/./d)?.*/, ''$1$2'');

No recomiendo usar la variante de cadena, solo digo.


x = número, n = lugares decimales:

function round(x, n) { return Math.round(x * Math.pow(10, n)) / Math.pow(10, n) }


Math.round( num * 10) / 10 funciona, aquí hay un ejemplo ...

var number = 12.3456789; var rounded = Math.round( number * 10 ) / 10; // rounded is 12.3

si quieres que tenga un lugar decimal, incluso cuando sea un 0, entonces agrega ...

var fixed = rounded.toFixed(1); // fixed is always to 1dp // BUT: returns string! // to get it back to number format parseFloat( number.toFixed(2) ) // 12.34 // but that will not retain any trailing zeros // so, just make sure it is the last step before output, // and use a number format during calculations!

EDITAR: añadir ronda con función de precisión ...

Usando este principio, como referencia, aquí hay una pequeña función práctica que toma precisión ...

function round(value, precision) { var multiplier = Math.pow(10, precision || 0); return Math.round(value * multiplier) / multiplier; }

... uso ...

round(12345.6789, 2) // 12345.68 round(12345.6789, 1) // 12345.7

... por defecto redondear al número entero más cercano (precisión 0) ...

round(12345.6789) // 12346

... y se puede usar para redondear a las 10 o 100 más cercanas, etc.

round(12345.6789, -1) // 12350 round(12345.6789, -2) // 12300

... y correcto manejo de números negativos ...

round(-123.45, 1) // -123.4 round(123.45, 1) // 123.5

... y se puede combinar con toFixed para formatear consistentemente como cadena ...

round(456.7, 2).toFixed(2) // "456.70"


Math.round( num * 10) / 10 no funciona.

Por ejemplo, 1455581777.8-145558160.4 le da 1310023617.3999999 .

Entonces solo use num.toFixed(1)


lodash tiene un método round :

_.round(4.006); // => 4 _.round(4.006, 2); // => 4.01 _.round(4060, -2); // => 4100

Docs .

Source


Math.round( mul/count * 10 ) / 10 Math.round(Math.sqrt(sqD/y) * 10 ) / 10

Gracias


var num = 34.7654; num = Math.round(num * 10) / 10; console.log(num); // Logs: 34.8


var number = 123.456; console.log(number.toFixed(1)); // should round to 123.5