Redondear números a 2 dígitos después de la coma

81

¿No tengo ni idea de cómo hacer esto? Estoy agregando números de coma, el resultado es, por supuesto, siempre un número con demasiados dígitos después de la coma. ¿nadie?

Sten Van den Bergh
fuente
1
En algunas configuraciones regionales, las comas se reemplazan por puntos.
DOK
@Matt: esto es parte del complemento jParseFloat, ¡será parte del núcleo de jQuery en 1.5!
Nick Craver

Respuestas:

105

EDITAR 2 :

Use el método Numberdel objeto toFixedcomo este:

var num = Number(0.005) // The Number() only visualizes the type and is not needed
var roundedString = num.toFixed(2);
var rounded = Number(roudedString); // toFixed() returns a string (often suitable for printing already)

Redondea 42.0054321 a 42.01

Redondea 0,005 a 0,01

Redondea de -0,005 a -0,01 (por lo que el valor absoluto aumenta al redondear en el borde de 0,5)

ejemplo de jsFiddle

Jacob Relkin
fuente
1
@Sten - ¿coma o decimal? su pregunta y su ejemplo no están de acuerdo.
Nick Craver
11
Este ejemplo no funciona si realmente desea redondear un número, digamos 0,007 a dos decimales. El resultado de esto es: Math.round (0.007) -> 0.000 y luego toFixed (2) -> 0.00. El proceso de redondeo real debería generar 0,01.
Andrei
9
downvote: la respuesta es incorrecta ya que Math.round () redondea el número, eliminando así todos los decimales. Todo lo que hace toFixed (2) es agregar dos ceros finales. Bastará con number.toFixed (2).
HammerNL
1
Se debe hacer algo ya que esta respuesta es incorrecta y es posible que otras personas no lean los comentarios antes de usar ciegamente la respuesta aceptada.
Pedro Moreira
1
−1: se 3.1415convierte 3.00en tu ejemplo.
103

ACTUALIZACIÓN: tenga en cuenta que en el momento en que la respuesta se escribió inicialmente en 2010, la función de abajo toFixed () funcionaba de forma ligeramente diferente. toFixed () parece hacer algo de redondeo ahora, pero no de una manera estrictamente matemática. Así que ten cuidado con eso. Haga sus pruebas ... El método descrito a continuación hará bien el redondeo, como esperaría un matemático.

  • toFixed()- El método convierte un número en una cadena, manteniendo un número específico de decimales. En realidad, no redondea un número hacia arriba, sino que lo trunca.
  • Math.round(n)- redondea un número al entero más cercano. Girando así:

0,5 -> 1; 0,05 -> 0

así que si desea redondear, diga el número 0.55555, solo al segundo lugar decimal; puede hacer lo siguiente (este es un concepto paso a paso):

  • 0.55555 * 100 = 55,555
  • Math.Round(55.555) -> 56.000
  • 56.000 / 100 = 0,56000
  • (0.56000).toFixed(2) -> 0,56

y este es el código:

(Math.round(number * 100)/100).toFixed(2);
Andrei
fuente
Yo utilizo el mismo método. Funciona muy bien
Indiana Kernick
Causó problemas para ejemplos cuando ya tenía flotante con los dígitos deseados después de coma como> (Math.round (123.12124 * 100) / 100) .toFixed (4); ===> 123.1200
Alendorff
1
Olvidó cambiar las matemáticas de redondeo, así: Math.round (123.12124 * 10000) / 10000) .toFixed (4). Esto es si desea redondear al cuarto lugar decimal.
Andrei
Error: toFixed () hace alrededor de la serie por lo que no es un truncamiento. Ver developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
MikeB
No pasa por 1.005
Len Joseph
54

Esto funcionó para mí:

var new_number = float.toFixed(2);

Ejemplo:

var my_float = 0.6666

my_float.toFixed(3) # => 0.667
Raivo
fuente
Creo que el problema con esto es que no "redondea" el número, por lo que se 0.6666.toFixed(3)convierte en 0.666lugar de 0.667. @Andrei parece tener la solución adecuada para redondear correctamente.
Joshua Pinter
1
¡Decir ah! No importa. Acabo de probar y toFixed()funciona perfectamente: 0.6666.toFixed(3) # => 0.667. Lo agregaré a tu respuesta.
Joshua Pinter
3
El más corto y el mejor. Esta debería ser la respuesta aceptada.
12

Las respuestas anteriores olvidaron volver a escribir la salida como un Número. Hay varias formas de hacerlo, según sus gustos.

+my_float.toFixed(2)

Number(my_float.toFixed(2))

parseFloat(my_float.toFixed(2))
Romain Vergnory
fuente
1
Esta es la mejor respuesta para mí. Es simple, corto y su resultado es un NÚMERO
Kar.ma
Me gusta la notación "+", muy elegante
Jibeee
4

Esto no es realmente compatible con la CPU, pero:

Math.round(number*100)/100

funciona como se esperaba.

Tu4n3r
fuente
2

Aunque tenemos muchas respuestas aquí con muchas sugerencias útiles, cada una de ellas todavía omite algunos pasos.
Así que aquí hay una solución completa envuelta en una pequeña función:

function roundToTwoDigitsAfterComma(floatNumber) {
    return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2));
}

En caso de que esté interesado en cómo funciona esto:

  1. Múltiple con 100 y luego redondee para mantener la precisión de 2 dígitos después de la coma
  2. Divida nuevamente en 100 y use toFixed(2)para mantener 2 dígitos después de la coma y arroje otra parte inútil
  3. Conviértalo de nuevo a flotante usando la parseFloat()función como toFixed(2)cadena de retorno en su lugar

Nota: Si mantiene los 2 últimos dígitos después de la coma debido a que trabaja con valores monetarios y hace cálculos financieros, tenga en cuenta que no es una buena idea y que será mejor que utilice valores enteros.

Solo sombra
fuente
1

utilice el siguiente código.

alert(+(Math.round(number + "e+2")  + "e-2"));
Fénix
fuente
2
Esta respuesta hace esencialmente lo mismo que las otras respuestas a esta pregunta de 7 años, pero de una manera muy oscura, explotando las conversiones de tipo implícitas de JavaScript. ¿Qué cualidades de este código te convencieron de publicarlo aquí?
u354356007
La calidad de esta respuesta es que me hizo aprender algo nuevo que no sabía sobre JS ;-)
Deblaton Jean-Philippe
0

Yo uso esto:

function round(value, precision) {

	if(precision == 0)
		return Math.round(value);  	

	exp = 1;
	for(i=0;i<precision;i++)
		exp *= 10;

	return Math.round(value*exp)/exp;
}

Gehtdich Nichtsan
fuente