Gostaria de formatar meus números para exibir sempre duas casas decimais, arredondando, quando aplicável.
Exemplos:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
Eu tenho usado isso:
parseFloat(num).toFixed(2);
Mas está exibindo 1
como 1
, e não 1.00
.
Respostas:
Demonstração ao vivo
Mostrar snippet de código
Observe que ele arredondará para 2 casas decimais; portanto, a entrada
1.346
retornará1.35
.fonte
1
exibir como1.00
e1.341
como1.34
.(+num).toFixed(2)
. Ele ainda mantém o erro de arredondamento no original, veja a resposta de Nate .Mostrar snippet de código
fonte
1.34
expressãoNumber(1.345).toFixed(2)
.1.345
é um exemplo de um número que não pode ser armazenado exatamente em ponto flutuante, então eu acho que a razão que ele não volta como você espera, é que ele é realmente armazenado como um número ligeiramente menos de 1.345 e é arredondado para baixo. Se você testar vez com(1.34500001).toFixed(2)
então você vê-lo corretamente arredonda para1.35
Esta resposta falhará se
value = 1.005
.Como uma solução melhor, o problema de arredondamento pode ser evitado usando números representados na notação exponencial:
Código mais limpo, conforme sugerido por @Kon, e o autor original:
Você pode adicionar
toFixed()
no final para reter o ponto decimal, por exemplo:1.00
mas observe que ele retornará como string.Crédito: Arredondar decimais em JavaScript
fonte
toFixed
tem esse problema de arredondamento. Sua resposta deve ser a aceita.Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
fonte
toPrecision
apenas formata o número para um número específico de casas decimais, simplesmente excluindo as casas redundantes, mas não as arredondando . Isso também pode ser muito útil, é claro, mas é importante entender a diferença.(20.55).toPrecision(3) "20.6"
toFixed
:const formattedVal = Number(val.toFixed(2));
Não usetoPrecision
, pois ele conta os números não-decimais ao usar o parâmetro de precisão.Para o arredondamento mais preciso, crie esta função:
e use-o para arredondar para duas casas decimais:
Graças a Razu , este artigo, e a referência Math.round do MDN .
fonte
Para navegadores modernos, use
toLocaleString
:Especifique uma tag de localidade como primeiro parâmetro para controlar o separador decimal . Para um ponto, use, por exemplo, localidade em inglês dos EUA:
que dá:
A maioria dos países da Europa usa vírgula como separador decimal; portanto, se você usa, por exemplo, o código de idioma sueco / sueco:
vai dar:
fonte
Resposta mais simples:
Exemplo: http://jsfiddle.net/E2XU7/
fonte
toFixed
já foi sugerido em stackoverflow.com/a/13292833/218196 . Que informações adicionais sua pergunta fornece?toFixed
para um número.Uma solução muito mais genérica para arredondar para N locais
fonte
roundN(-3.4028230607370965e+38,2)
retorna em"-3.4028230607370965e+38"
vez do esperado 0,00https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
fonte
Se você já usa o jQuery, pode usar o plug-in jQuery Number Format .
O plug-in pode retornar números formatados como uma seqüência de caracteres, você pode definir separadores decimais e milhares e pode escolher o número de decimais a serem exibidos.
Você também pode obter o formato de número jQuery no GitHub .
fonte
É isto que você quer dizer?
fonte
Converta um número em uma string, mantendo apenas duas casas decimais:
O resultado de n será:
fonte
Você está procurando andar?
fonte
fonte
Aqui também está uma função genérica que pode formatar para qualquer número de casas decimais:
fonte
Onde formatação específica é necessária, você deve escrever sua própria rotina ou usar uma função de biblioteca que faça o que você precisa. A funcionalidade básica do ECMAScript geralmente é insuficiente para exibir números formatados.
Uma explicação completa sobre arredondamento e formatação está aqui: http://www.merlyn.demon.co.uk/js-round.htm#RiJComo regra geral, o arredondamento e a formatação devem ser executados apenas como uma última etapa antes da saída. Fazer isso antes pode introduzir erros inesperadamente grandes e destruir a formatação.
fonte
fonte
Basta correr para este de fio mais longo, abaixo está a minha solução:
Deixe-me saber se alguém pode fazer um buraco
fonte
Mostrar snippet de código
fonte
parseFloat(num.toFixed(2))
Você não está nos dando uma imagem completa.
javascript:alert(parseFloat(1).toFixed(2))
mostra 1,00 nos navegadores quando colo na barra de localização. No entanto, se você fizer algo posteriormente, ele será revertido.fonte
fonte
Eu tive que decidir entre as conversões parseFloat () e Number () antes de poder fazer a chamada toFixed (). Aqui está um exemplo de uma formatação de número de entrada de usuário pós-captura.
HTML:
Manipulador de eventos:
O código acima resultará na exceção TypeError. Observe que, embora o tipo de entrada html seja "number", a entrada do usuário é realmente um tipo de dados "string". No entanto, a função toFixed () pode ser invocada apenas em um objeto que é um número.
Meu código final teria a seguinte aparência:
A razão pela qual eu prefiro converter com Number () vs. parseFloat () é porque não preciso executar uma validação extra nem para uma sequência de entrada vazia nem para o valor NaN. A função Number () manipularia automaticamente uma string vazia e a zeraria.
fonte
Eu gosto:
Arredonde o número com 2 casas decimais e, em seguida, analise-o
parseFloat()
para retornar Number, não String, a menos que você não se importe se é String ou Number.fonte
parseFloat("1.00") // 1
Estenda o objeto Math com o método de precisão
fonte
parseInt(number * 100) / 100;
trabalhou para mim.fonte
aqui está outra solução para arredondar apenas o piso, ou seja, garantir que o valor calculado não seja maior que o valor original (às vezes necessário para transações):
fonte
Você pode tentar este código:
fonte
Experimente o código abaixo:
fonte
fonte
É assim que eu resolvo meu problema:
fonte