Estou procurando obter o tamanho de um número em JavaScript ou jQuery?
Tentei value.length
sem sucesso. Preciso converter isso em uma string primeiro?
javascript
jquery
Code Junkie
fonte
fonte
Respostas:
Este processo também funcionará para
Float Number
e paraExponential number
também.fonte
Ok, muitas respostas, mas essa é pura matemática, apenas por diversão ou por lembrar que a matemática é importante:
Na verdade, isso fornece o "comprimento" do número, mesmo que esteja na forma exponencial.
num
deve ser um número inteiro não negativo aqui: se for negativo, pegue seu valor absoluto e ajuste o sinal posteriormente.Atualização para ES2015
Agora isso
Math.log10
é uma coisa , você pode simplesmente escreverfonte
Math.ceil
e usa um mais rápidoMath.abs
. Mas sinceramente não esperava esse ganho de desempenho no Chrome ... É bom saber!Eu tenho usado essa funcionalidade no node.js, esta é a minha implementação mais rápida até agora:
Ele deve manipular números inteiros positivos e negativos (também na forma exponencial) e deve retornar o comprimento da parte inteira em números flutuantes.
A referência a seguir deve fornecer algumas dicas sobre o método: Weisstein, Eric W. "Number Length". De MathWorld - um recurso da Web da Wolfram.
Acredito que alguma operação bit a bit possa substituir o Math.abs, mas o jsperf mostra que o Math.abs funciona bem na maioria dos mecanismos js.
Atualização : conforme observado nos comentários, esta solução tem alguns problemas :(
Atualização2 (solução alternativa) : acredito que, em algum momento, surjam problemas de precisão e os que
Math.log(...)*0.434...
se comportam inesperadamente. No entanto, se os dispositivos Internet Explorer ou Mobile não forem sua xícara de chá, você poderá substituir esta operação pelaMath.log10
função No Node.js, escrevi um teste básico rápido com a funçãonLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;
e comMath.log10
ela funcionou conforme o esperado. Observe queMath.log10
não é universalmente suportado.fonte
Você deve fazer o número para string, a fim de levar o comprimento
ou
fonte
Também pode usar uma sequência de modelos:
fonte
Bem, sem converter o número inteiro em uma string, você pode criar um loop funky:
Demonstração: http://jsfiddle.net/maniator/G8tQE/
fonte
.
como parte do cálculo.Primeiro converta-o em uma string:
Adicionar uma string vazia a ela implicitamente fará
mynumber
com que ela se transforme em uma string.fonte
Existem três maneiras de fazer isso.
melhor desempenho um (melhor desempenho no ie11)
Math (melhor desempenho no Chrome, Firefox, mas o mais lento no ie11)
existe um jspref aqui http://jsperf.com/fastest-way-to-get-the-first-in-a-number/2
fonte
Você deve optar pelo mais simples (stringLength), a legibilidade sempre supera a velocidade. Mas se você se preocupa com velocidade, aqui estão alguns abaixo.
Três métodos diferentes, todos com velocidade variável.
fonte
Fiz uma pergunta semelhante em um teste.
Números negativos foram adicionados para complicar um pouco mais, daí o Math.abs ().
fonte
Gostaria de corrigir a resposta do @Neal, que era bastante boa para números inteiros, mas o número 1 retornaria um comprimento de 0 no caso anterior.
fonte
Tente o seguinte:
Exemplo disso em uso
fonte
Sim, você precisa converter em string para encontrar o comprimento.
fonte