Perdi uma chamada de API padrão que remove zeros insignificantes à direita de um número?
Ex.
var x = 1.234000 // to become 1.234;
var y = 1.234001; // stays 1.234001
Number.toFixed () e Number.toPrecision () não são exatamente o que estou procurando.
javascript
regex
math
numbers
Steven
fonte
fonte
1.234000 === 1.234
.parseFloat(n)
?Respostas:
Se você convertê-lo em uma string, ele não exibirá zeros à direita, que não são armazenados na variável em primeiro lugar desde que foi criado como um número, não como uma string.
fonte
var n = 1.245000000000001
(assumindo que é insignificante para ser representado com o usuário)Eu tive um exemplo semelhante em que queria usar
.toFixed()
quando necessário, mas não queria o preenchimento quando não estava. Então, acabei usando o parseFloat em conjunto com o toFixed.Fixado sem preenchimento
Outra opção que faz quase a mesma coisa
Esta resposta pode ajudar sua decisão
toFixed
arredondará / preencherá o número em um comprimento específico, mas também o converterá em uma sequência. Converter isso de volta para um tipo numérico não apenas tornará o número mais seguro para usar aritmeticamente, mas também eliminará automaticamente os 0s à direita. Por exemplo:Porque mesmo se você definir um número com zeros à direita, eles serão descartados.
fonte
parseFloat(n).toFixed(4);
vez da sua resposta real. Eu sinto Muito.+(n.toFixed(4))
?Eu usei uma combinação das respostas de matti-lyra e gary:
Resultados:
O caso um tanto problemático é 0.10001. Acabei usando esta versão mais longa:
Atualização : E esta é a versão mais recente de Gary (ver comentários):
Isso fornece os mesmos resultados acima.
fonte
toFixed(4).replace(/([0-9]+(\.[1-9]+)?)(\.?0+$)/,"$1")
([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)
replace(/[,.][1-9]+(0+)/,'')
? #O
toFixed
método fará o arredondamento apropriado, se necessário. Ele também adicionará zeros à direita, o que nem sempre é o ideal.Se você converter o valor de retorno para um número, os zeros à direita serão eliminados. Essa é uma abordagem mais simples do que fazer sua própria matemática de arredondamento ou truncamento.
fonte
toFixed
chamada). é um caso de borda UX estranho.Eu tinha basicamente o mesmo requisito e descobri que não há mecanismo interno para essa funcionalidade.
Além de aparar os zeros à direita, também tive a necessidade de arredondar e formatar a saída para a localidade atual do usuário (ou seja, 123.456.789).
Todo o meu trabalho sobre isso foi incluído como prettyFloat.js (MIT licenciado) no GitHub: https://github.com/dperish/prettyFloat.js
Exemplos de uso:
Atualizado - agosto de 2018
Todos os navegadores modernos agora oferecem suporte à API de Internacionalização do ECMAScript , que fornece comparação de strings sensíveis ao idioma, formatação de números e formatação de data e hora.
Para navegadores mais antigos, você pode usar este polyfill: https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en
fonte
Que tal apenas multiplicar por um como este?
fonte
Você pode tentar este para reduzir números flutuantes
fonte
Resposta regex pura
Eu me pergunto por que ninguém deu um!
fonte
Eu também precisava resolver esse problema quando o Django estava exibindo valores de tipo decimal em um campo de texto. Por exemplo, quando '1' era o valor. Ele mostraria '1.00000000'. Se '1,23' fosse o valor, ele mostraria '1,23000000' (no caso de uma configuração de 'decimal_places' de 8)
Usar parseFloat não era uma opção para mim, pois é possível que ele não retorne exatamente o mesmo valor. O toFixed não era uma opção, pois eu não queria arredondar nada, então criei uma função:
fonte
Nenhuma dessas soluções funcionou para mim por números muito pequenos. http://numeraljs.com/ resolveu isso para mim.
fonte
Se você não puder usar flutuadores por qualquer motivo (como dinheiro envolvido) e já estiver iniciando a partir de uma sequência que representa um número correto, poderá encontrar esta solução útil. Ele converte uma string representando um número em uma string representando o número sem zeros à direita.
fonte
Depois de ler todas as respostas - e comentários - acabei com isso:
Eu sei que o uso
eval
pode ser prejudicial de alguma forma, mas isso me ajudou muito.Assim:
Se você deseja limitar as casas decimais, use
toFixed()
como as outras pessoas apontaram.É isso aí.
fonte
Eu precisava remover quaisquer zeros à direita, mas manter pelo menos 2 casas decimais, incluindo zeros.
Os números com os quais estou trabalhando são seis seqüências de números decimais, geradas por .toFixed (6).
Resultado esperado:
Solução:
Lógica:
Execute a função de loop se o último caractere da cadeia for zero.
Remova o último caractere e atualize a variável de sequência.
Se o último caractere da string atualizada não for zero, termine o loop.
Se a sequência atualizada do terceiro ao último caractere for um ponto flutuante, termine o loop.
fonte
Aqui está uma solução possível:
fonte
parseFloat()
será muito apropriado.