length
é uma propriedade, não um método. Você não pode chamá-lo, portanto, não precisa de parênteses ()
:
function getlength(number) {
return number.toString().length;
}
ATUALIZAÇÃO: Conforme discutido nos comentários, o exemplo acima não funcionará para números flutuantes. Para torná-lo trabalho que pode se livrar de um período com String(number).replace('.', '').length
, ou contar os dígitos com expressão regular: String(number).match(/\d/g).length
.
Em termos de velocidade, potencialmente, a maneira mais rápida de obter o número de dígitos no número fornecido é fazê-lo matematicamente. Para números inteiros positivos, existe um algoritmo maravilhoso com log10
:
var length = Math.log(number) * Math.LOG10E + 1 | 0; // for positive integers
Para todos os tipos de números inteiros (incluindo negativos), existe uma solução otimizada brilhante do @ Mwr247 , mas tenha cuidado com o uso Math.log10
, pois ele não é suportado por muitos navegadores herdados. Portanto, a substituição Math.log10(x)
por Math.log(x) * Math.LOG10E
resolverá o problema de compatibilidade.
Criar soluções matemáticas rápidas para números decimais não será fácil devido ao comportamento bem conhecido da matemática de ponto flutuante ; portanto, a abordagem de conversão por string será mais fácil e à prova de erros. Conforme mencionado pelo @streetlogics, a conversão rápida pode ser feita com concatenação simples de número para string, levando a solução de substituição a ser transformada em:
var length = (number + '').replace('.', '').length; // for floats