em JavaScript, a maneira típica de arredondar um número para N casas decimais é algo como:
function roundNumber(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
No entanto, essa abordagem arredondará para um máximo de N casas decimais, enquanto eu quero sempre arredondar para N casas decimais. Por exemplo, "2.0" seria arredondado para "2".
Alguma ideia?
toFixed()
( developer.mozilla.org/En/Core_JavaScript_1.5_Reference/… ), mas é bugado no IE: stackoverflow.com/questions/661562/… ; você terá que escrever sua própria versão ...Respostas:
Isso não é um problema de arredondamento, é um problema de exibição. Um número não contém informações sobre dígitos significativos; o valor 2 é igual a 2.0000000000000. É quando você transforma o valor arredondado em uma string que você o faz exibir um certo número de dígitos.
Você pode simplesmente adicionar zeros após o número, algo como:
(Observe que isso pressupõe que as configurações regionais do cliente usam o ponto como separador decimal, o código precisa de mais trabalho para funcionar para outras configurações.)
fonte
toFixed()
para preencher decimais no final, após o arredondamento?1.02449999998.toFixed(4)
retorna corretamente1.0245
.Eu acho que há uma abordagem mais simples para todos dados aqui, e é o método
Number.toFixed()
já implementado em JavaScript.simplesmente escreva:
etc ...
fonte
toFixed()
retorna uma string.Eu encontrei um caminho. Este é o código de Christoph com uma correção:
Leia os detalhes de repetição de um caractere usando um construtor de array aqui se você estiver curioso para saber por que adicionei o "+ 1".
fonte
Sempre há uma maneira melhor de fazer as coisas.
Eu gostaria de obter uma precisão de quatro dígitos: 51,94
apenas faça:
o resultado será: 51,94
fonte
Método de arredondamento semelhante ao PHP
O código a seguir pode ser usado para adicionar sua própria versão de Math.round ao seu próprio namespace, que recebe um parâmetro de precisão. Ao contrário do arredondamento decimal no exemplo acima, ele não executa nenhuma conversão de e para strings, e o parâmetro de precisão funciona da mesma maneira que PHP e Excel, em que um 1 positivo seria arredondado para 1 casa decimal e -1 seria arredondado para dezenas.
da referência do desenvolvedor Mozilla para Math.round ()
fonte
Esperançosamente código funcionando (não fiz muitos testes):
fonte
Acho que a função abaixo pode ajudar
uso:
roundOff(600.23458,2);
irá retornar600.23
fonte
Isso funciona para arredondar para N dígitos (se você deseja apenas truncar para N dígitos, remova a chamada Math.round e use a chamada Math.trunc):
Tive que recorrer a essa lógica em Java no passado, quando eu estava criando componentes E-Slate de manipulação de dados . Isso porque eu descobri que adicionar 0,1 muitas vezes a 0 você acabaria com alguma parte decimal inesperadamente longa (isso se deve à aritmética de ponto flutuante).
Um comentário do usuário em Formato número para sempre mostrar 2 casas decimais chama essa técnica de escalonamento.
Alguns mencionam que há casos que não são arredondados conforme o esperado e em http://www.jacklmoore.com/notes/rounding-in-javascript/ isso é sugerido:
fonte
Se você realmente não se importa com o arredondamento, basta adicionar um toFixed (x) e remover os 0es finais e o ponto, se necessário. Não é uma solução rápida.
fonte
format(1.2, 5)
e consegui1.2
, enquanto esperava1.20000
.