125 votos

Obtener el número de dígitos con JavaScript

Como sugiere el título de mi post, me gustaría saber cuántos dígitos var number tiene. Por ejemplo: Si number = 15; mi función debería devolver 2 . Actualmente, tiene este aspecto:

function getlength(number) {
  return number.toString().length();
}

Pero Safari dice que no funciona debido a un TypeError :

'2' is not a function (evaluating 'number.toString().length()')

Como puedes ver, '2' es realmente la solución correcta. Pero, ¿por qué es not a function ?

225voto

VisioN Puntos 62518

length es una propiedad, no un método. No se puede llamar, por lo que no se necesitan paréntesis () :

function getlength(number) {
    return number.toString().length;
}

ACTUALIZACIÓN: Como se ha dicho en los comentarios, el ejemplo anterior no funcionará con números flotantes. Para que funcione podemos eliminar el punto con number.toString().replace('.', '').length o contar números con una expresión regular: number.toString().match(/\d/g).length .

En términos de velocidad, potencialmente la forma más rápida para obtener el número de dígitos de un número es hacerlo matemáticamente. Para los números enteros existe un maravilloso algoritmo con log10 :

var length = ~~(Math.log(number) / Math.LN10 + 1);  // for integers

Sin embargo, con los números flotantes no será tan fácil debido a la comportamiento conocido de las matemáticas en coma flotante Así que el enfoque "cast-to-string" será más fácil y a prueba de tontos. Como menciona @streetlogics La fundición rápida se puede hacer con una simple concatenación de números a cadenas, lo que lleva a que la solución de "reemplazo" se transforme en

var length = (number + '').replace('.', '').length;  // for floats

21voto

streetlogics Puntos 1558

Ya que esto apareció en una búsqueda en Google de "javascript obtener el número de dígitos", quería decir que hay una alternativa más corta a esto que se basa en la fundición interna que se hace para usted:

var int_number = 254;
var int_length = (''+int_number).length;

var dec_number = 2.12;
var dec_length = (''+dec_number).length;

console.log(int_length, dec_length);

Rendimientos

3 4

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X