JavaScript que muestra un flotante a 2 decimales


316

Quería mostrar un número con 2 decimales.

Pensé que podría usar toPrecision(2)en JavaScript.

Sin embargo, si el número es 0.05, me sale 0.0500. Prefiero que siga igual.

Véalo en JSbin .

¿Cuál es la mejor manera de hacer esto?

Puedo pensar en codificar algunas soluciones, pero me imagino (espero) que algo como esto está incorporado.

Respuestas:


560
float_num.toFixed(2);

Nota:toFixed() se redondeará o rellenará con ceros si es necesario para cumplir con la longitud especificada.


61
¡Pero devuelve cadena, no flotante!
Anwar

38
El autor de la pregunta quiere "mostrarlo", por lo que una cadena es perfecta
Christophe Marois

77
Y siempre puede usar parseFloat (float_num.toFixed (2)) para convertir la cadena de nuevo a flotante manteniendo solo dos decimales.
Hankrecords

3
@anwar no puedes redondear un flotador de manera confiable (podría decirse que puedes redondear un flotador): obtendrás algo como 0.0500 o incluso 0.0500000000001. Ver floating-point-gui.de
jmc

2
@Hankrecords lo que dijiste no es cierto. Si tengo '43 .01 'y analizo Flotar, obtengo 43.01 PERO si tengo '43 .10' obtendré 43.1: D no es lo que quiero.
Lucian Tarna

50

Podrías hacerlo con la toFixedfunción, pero tiene errores en IE . Si quieres una solución confiable, mira mi respuesta aquí .


26
La tecnología debe desarrollarse en lugar de adaptarse a IE ... (por cierto, en el nodo js float_num.toFixed(2);funciona bien)
fider


14

No sé cómo llegué a esta pregunta, pero incluso si han pasado muchos años desde que se hizo esta pregunta, me gustaría agregar un método rápido y simple que sigo y nunca me ha decepcionado:

var num = response_from_a_function_or_something();

var fixedNum = parseFloat(num).toFixed( 2 );

1
¿Por qué parseFloat()allí? Solo debe usarse si el número proviene de una cadena.
alex

3
En algunas ocasiones, cuando obtengo un valor de atributo "data-" con jquery de un elemento, si uso solo toFixed, se produce un error. parseFloat lo arregla.
panos

2
Sí, eso es lo que quise decir si venía de una cuerda . Pero usarlo siempre es un mal consejo.
alex


8

number.parseFloat(2) funciona pero devuelve una cadena.

Si desea conservarlo como un tipo de número, puede usar:

Math.round(number * 100) / 100


4

Podrías intentar mezclar Number()y toFixed().

Haga que su número objetivo se convierta en una bonita cadena con X dígitos y luego convierta la cadena formateada en un número.

Number( (myVar).toFixed(2) )


Ver ejemplo a continuación:

var myNumber = 5.01;
var multiplier = 5;
$('#actionButton').on('click', function() {
  $('#message').text( myNumber * multiplier );
});

$('#actionButton2').on('click', function() {
  $('#message').text( Number( (myNumber * multiplier).toFixed(2) ) );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<button id="actionButton">Weird numbers</button>
<button id="actionButton2">Nice numbers</button>

<div id="message"></div>


Gracias por tu buena referencia.
Arman H

1

El toFixed()método formatea un número usando notación de punto fijo.

y aquí está la sintaxis

numObj.toFixed([digits])

El argumento de dígitos es opcional y, por defecto, es 0. Y el tipo de retorno es string no number. Pero puedes convertirlo a número usando

numObj.toFixed([digits]) * 1

También puede arrojar excepciones como TypeError,RangeError

Aquí está el detalle completo y la compatibilidad en el navegador.


1
let a = 0.0500
a.toFixed(2);

//output
0.05

-1

He hecho esta función. Funciona bien pero devuelve cadena.

function show_float_val(val,upto = 2){
  var val = parseFloat(val);
  return val.toFixed(upto);
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.