JavaScript exibindo um ponto flutuante com 2 casas decimais

316

Eu queria exibir um número com 2 casas decimais.

Eu pensei que poderia usar toPrecision(2)em JavaScript.

No entanto, se o número for 0.05, eu entendo 0.0500. Eu prefiro que continue o mesmo.

Veja no JSbin .

Qual é a melhor maneira de fazer isso?

Posso pensar em codificar algumas soluções, mas imagino (espero) que algo assim esteja incorporado?

alex
fonte

Respostas:

560
float_num.toFixed(2);

Nota:toFixed() arredondará ou zeros se necessário para atender ao comprimento especificado.

Jason McCreary
fonte
61
Mas ele retorna string, não float!
Anwar
38
Pergunta autor quer "display", então uma string é perfeito
Christophe Marois
7
E você sempre pode usar parseFloat (float_num.toFixed (2)) para converter a sequência novamente em float, mantendo apenas duas casas decimais.
Hankrecords
3
@ anwar, você não pode arredondar um float de maneira confiável (sem dúvida você pode arredondar um float) - você obterá algo como 0,0500 ou mesmo 0,0500000000001. Veja flutuante-point-gui.de
jmc
2
@Hankrecords o que você disse não é verdade. Se eu tenho '43 .01 'e eu parseFloat, recebo 43.01, mas se eu tiver '43 .10', recebo 43.1: D não é o que eu quero.
Lucian Tarna
50

Você poderia fazer isso com a toFixedfunção, mas é um bug no IE . Se você deseja uma solução confiável, veja minha resposta aqui .

Elias Zamaria
fonte
26
A tecnologia deve ser desenvolvida em vez de se adaptar ao IE ... (. Btw em js nó float_num.toFixed(2);fina funciona)
FIDER
14

Não sei como cheguei a essa pergunta, mas, mesmo depois de muitos anos desde que isso foi feito, gostaria de adicionar um método rápido e simples que sigo e nunca me decepcionou:

var num = response_from_a_function_or_something();

var fixedNum = parseFloat(num).toFixed( 2 );
panos
fonte
1
Porque parseFloat()ai Só deve ser usado se o número vier de uma string.
alex
3
Em algumas ocasiões, quando obtenho algum valor de atributo "data-" com jquery de um elemento, se eu usar apenas o toFixed, isso produzirá um erro. parseFloat corrige isso.
panos 13/01
2
Sim, foi isso que eu quis dizer acima, se for de uma corda . Mas usá-lo sempre é um mau conselho.
alex
8

number.parseFloat(2) funciona, mas retorna uma string.

Se você deseja preservá-lo como um tipo de número, pode usar:

Math.round(number * 100) / 100

rnmalone
fonte
4

Você pode tentar misturar Number()e toFixed().

Transforme seu número de destino em uma boa sequência com dígitos X e depois converta a sequência formatada em um número.

Number( (myVar).toFixed(2) )


Veja o exemplo abaixo:

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>

George-Paul B.
fonte
Obrigado por você boa referência.
Arman H #
1

O toFixed()método formata um número usando a notação de ponto fixo.

e aqui está a sintaxe

numObj.toFixed([digits])

O argumento digits é opcional e, por padrão, é 0. E o tipo de retorno é string, não number. Mas você pode convertê-lo em número usando

numObj.toFixed([digits]) * 1

Também pode gerar exceções como TypeError,RangeError

Aqui estão todos os detalhes e compatibilidade no navegador.

Sunil Garg
fonte
1
let a = 0.0500
a.toFixed(2);

//output
0.05
Rizo
fonte
-1

Eu fiz essa função. Funciona bem, mas retorna string.

function show_float_val(val,upto = 2){
  var val = parseFloat(val);
  return val.toFixed(upto);
}
Syed Nurul Islam
fonte