Estoy buscando obtener la longitud de un número en JavaScript o jQuery?
Lo he intentado value.length
sin éxito, ¿primero necesito convertir esto en una cadena?
javascript
jquery
Code Junkie
fuente
fuente
Respuestas:
Este proceso también funcionará por
Float Number
y paraExponential number
también.fuente
Ok, muchas respuestas, pero esta es pura matemática, solo por diversión o para recordar que las matemáticas son importantes:
Esto realmente da la "longitud" del número, incluso si está en forma exponencial.
num
se supone que es un número entero no negativo aquí: si es negativo, tome su valor absoluto y ajuste el signo después.Actualización para ES2015
Ahora que
Math.log10
es una cosa , simplemente puedes escribirfuente
Math.ceil
y usa una más rápida en suMath.abs
lugar. Pero, sinceramente, no esperaba ese aumento de rendimiento en Chrome ... ¡Es bueno saberlo!He estado usando esta funcionalidad en node.js, esta es mi implementación más rápida hasta ahora:
Debe manejar enteros positivos y negativos (también en forma exponencial) y debe devolver la longitud de la parte entera en flotantes.
La siguiente referencia debe proporcionar una idea del método: Weisstein, Eric W. "Number Length". De MathWorld: un recurso web de Wolfram.
Creo que alguna operación bit a bit puede reemplazar a Math.abs, pero jsperf muestra que Math.abs funciona bien en la mayoría de los motores js.
Actualización : como se señaló en los comentarios, esta solución tiene algunos problemas :(
Actualización 2 (solución alternativa) : creo que en algún momento entran en juego los problemas de precisión y el
Math.log(...)*0.434...
justo se comporta inesperadamente. Sin embargo, si Internet Explorer o dispositivos móviles no son su taza de té, puede reemplazar esta operación con laMath.log10
función. En Node.js escribí una prueba básica rápida con la funciónnLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;
yMath.log10
funcionó como se esperaba. Tenga en cuenta queMath.log10
no es universalmente compatible.fuente
Tienes que hacer el número para encadenar para tomar longitud
o
fuente
También podría usar una cadena de plantilla:
fuente
Bueno, sin convertir el entero en una cadena, podrías hacer un bucle funky:
Demostración: http://jsfiddle.net/maniator/G8tQE/
fuente
.
como parte del cálculo.Primero conviértalo a una cadena:
Agregarle una cadena vacía implícitamente hará
mynumber
que se convierta en una cadena.fuente
Hay tres formas de hacerlo.
mejor rendimiento uno (mejor rendimiento en ie11)
Matemáticas (mejor rendimiento en Chrome, firefox pero el más lento en ie11)
hay un jspref aquí http://jsperf.com/fastest-way-to-get-the-first-in-a-number/2
fuente
Debes elegir el más simple (stringLength), la legibilidad siempre supera la velocidad. Pero si te importa la velocidad, aquí hay algunos a continuación.
Tres métodos diferentes, todos con velocidad variable.
fuente
Me hicieron una pregunta similar en una prueba.
Se agregaron números negativos para complicarlo un poco más, de ahí el Math.abs ().
fuente
Me gustaría corregir la respuesta @Neal que fue bastante buena para los enteros, pero el número 1 devolvería una longitud de 0 en el caso anterior.
fuente
Prueba esto:
Ejemplo de uso
fuente
Sí, necesita convertir a cadena para encontrar la longitud. Por ejemplo
fuente