length
es una propiedad, no un método No puede llamarlo, por lo tanto, no necesita paréntesis ()
:
function getlength(number) {
return number.toString().length;
}
ACTUALIZACIÓN: Como se discutió en los comentarios, el ejemplo anterior no funcionará para números flotantes. Para hacer que funcione bien nos podemos deshacernos de un período con String(number).replace('.', '').length
, o contar con los dígitos expresión regular: String(number).match(/\d/g).length
.
En términos de velocidad, potencialmente la forma más rápida de obtener el número de dígitos en el número dado es hacerlo matemáticamente. Para enteros positivos hay un algoritmo maravilloso con log10
:
var length = Math.log(number) * Math.LOG10E + 1 | 0; // for positive integers
Para todos los tipos de enteros (incluidos los negativos) hay una solución optimizada brillante de @ Mwr247 , pero tenga cuidado con el uso Math.log10
, ya que no es compatible con muchos navegadores heredados. Por lo tanto, reemplazar Math.log10(x)
con Math.log(x) * Math.LOG10E
resolverá el problema de compatibilidad.
Crear soluciones matemáticas rápidas para números decimales no será fácil debido al comportamiento bien conocido de las matemáticas de coma flotante , por lo que el enfoque de conversión a cuerda será más fácil y a prueba de tontos. Como se menciona en @streetlogics, la conversió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