JavaScript visualizza un float con 2 cifre decimali


316

Volevo visualizzare un numero con 2 cifre decimali.

Pensavo di poter usare toPrecision(2)in JavaScript.

Tuttavia, se il numero è 0.05, ottengo 0.0500. Preferirei che rimanesse lo stesso.

Guardalo su JSbin .

Qual è il modo migliore per farlo?

Posso pensare di codificare alcune soluzioni, ma immagino (spero) che sia integrato qualcosa del genere?

Risposte:


560
float_num.toFixed(2);

Nota:toFixed() arrotonderà o riempirà con zeri se necessario per soddisfare la lunghezza specificata.


61
Ma restituisce stringa, non float!
Anwar,

38
L'autore della domanda vuole "visualizzarlo", quindi una stringa è perfetta
Christophe Marois,

7
E puoi sempre usare parseFloat (float_num.toFixed (2)) per riconvertire la stringa in float mantenendo solo due decimali.
Hankrecords,

3
@anwar non puoi aggirare in modo affidabile un float (probabilmente puoi arrotondare un float) - otterrai qualcosa come 0,0500 o anche 0,0500000000001. Vedi floating-point-gui.de
jmc

2
@Hankrecords quello che hai detto non è vero. Se ho '43 .01 'e parseFloat allora ottengo 43.01 MA se ho '43 .10' otterrò 43.1: D non quello che voglio.
Lucian Tarna,

50

Potresti farlo con la toFixedfunzione, ma è difettoso in IE . Se vuoi una soluzione affidabile, guarda la mia risposta qui .


26
La tecnologia dovrebbe essere sviluppata piuttosto che adattarsi a IE ... (a proposito nel nodo js float_num.toFixed(2);funziona bene)
fider


14

Non so come sono arrivato a questa domanda, ma anche se sono passati molti anni da quando mi è stato chiesto, vorrei aggiungere un metodo rapido e semplice che seguo e non mi ha mai deluso:

var num = response_from_a_function_or_something();

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

1
Perché parseFloat()lì? Dovrebbe essere usato solo se il numero proviene da una stringa.
alex

3
In alcune occasioni quando ottengo un valore di attributo "data-" con jquery da un elemento, se uso solo su Fix, produce un errore. parseFloat lo risolve.
panos

2
Sì, questo è ciò che intendevo sopra se proveniva da una stringa . Ma usarlo è sempre un cattivo consiglio.
alex


8

number.parseFloat(2) funziona ma restituisce una stringa.

Se desideri conservarlo come tipo di numero, puoi utilizzare:

Math.round(number * 100) / 100


4

Potresti provare a mescolare Number()e toFixed().

Fai convertire il tuo numero target in una bella stringa con X cifre, quindi converti la stringa formattata in un numero.

Number( (myVar).toFixed(2) )


Vedi l'esempio seguente:

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>


Grazie per il tuo bel riferimento.
Arman H

1

Il toFixed()metodo formatta un numero usando la notazione a virgola fissa.

ed ecco la sintassi

numObj.toFixed([digits])

L' argomento cifre è facoltativo e per impostazione predefinita è 0. E il tipo restituito è stringa non numero. Ma puoi convertirlo in numero usando

numObj.toFixed([digits]) * 1

Può anche generare eccezioni come TypeError,RangeError

Ecco tutti i dettagli e la compatibilità nel browser.


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

//output
0.05

-1

Ho fatto questa funzione. Funziona bene ma restituisce una stringa.

function show_float_val(val,upto = 2){
  var val = parseFloat(val);
  return val.toFixed(upto);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.