validar - Obtenga el número de dígitos con JavaScript
validacion de formularios con javascript ejemplos (8)
var i = 1;
while( ( n /= 10 ) >= 1 ){ i++ }
23432 i = 1
2343.2 i = 2
234.32 i = 3
23.432 i = 4
2.3432 i = 5
0.23432
Como sugiere el título de mi publicación, me gustaría saber cuántos dígitos tiene el var number
. Por ejemplo: si number = 15;
mi función debería devolver 2
. Actualmente, se ve así:
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 puede ver, ''2''
es realmente la solución correcta. Pero, ¿por qué no not a function
?
Aquí hay una respuesta matemática (también funciona para números negativos):
function numDigits(x) {
return Math.max(Math.floor(Math.log10(Math.abs(x))), 0) + 1;
}
Y una versión optimizada de lo anterior (operaciones a nivel de bit más eficientes):
function numDigits(x) {
return (Math.log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;
}
Esencialmente, comenzamos obteniendo el valor absoluto de la entrada para permitir que los valores negativos funcionen correctamente. Luego ejecutamos a través de la operación log10 para darnos qué potencia de 10 es la entrada (si estuvieras trabajando en otra base, usarías el logaritmo para esa base), que es el número de dígitos. Luego plantamos la salida para que solo capte la parte entera de eso. Finalmente, usamos la función max para arreglar los valores decimales (cualquier valor fraccionario entre 0 y 1 simplemente devuelve 1, en lugar de un número negativo), y agregamos 1 a la salida final para obtener el conteo.
Lo anterior asume (basado en su entrada de ejemplo) que desea contar la cantidad de dígitos en enteros (entonces 12345 = 5, y por lo tanto 12345.678 = 5 también). Si desea contar el número total de dígitos en el valor (entonces 12345.678 = 8), agregue esto antes del ''retorno'' en cualquiera de las funciones anteriores:
x = Number(String(x).replace(/[^0-9]/g, ''''));
Como esto surgió en una búsqueda en Google de "javascript get number of digits", quería decir que hay una alternativa más corta a esto que depende de la conversión interna que se hará por 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
Dos dígitos: función simple en caso de que necesite dos o más dígitos de un número con ECMAScript 6 (ES6):
const zeroDigit = num => num.toString().length === 1 ? `0${num}` : num;
La propiedad de longitud devuelve la longitud de una cadena (número de caracteres).
La longitud de una cadena vacía es 0.
var str = "Hello World!";
var n = str.length;
El resultado de n será: 12
var str = "";
var n = str.length;
El resultado de n será: 0
Propiedad de longitud de matriz:
La propiedad de longitud establece o devuelve la cantidad de elementos en una matriz.
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;
El resultado será: 4
Sintaxis:
Devuelve la longitud de una matriz:
array.length
Establecer la longitud de una matriz:
array.length=number
Si necesita dígitos (después del separador), puede simplemente dividir el número y contar la segunda parte de la longitud (después del punto).
function countDigits(number) {
var sp = (number + '''').split(''.'');
if (sp[1] !== undefined) {
return sp[1].length;
} else {
return 0;
}
}
Todavía estoy aprendiendo Javascript, pero se me ocurrió esta función en C hace un rato, que utiliza matemáticas y un ciclo while en lugar de una cadena, así que lo reescribí para Javascript. Tal vez esto podría hacerse de manera recursiva de alguna manera, pero todavía no he captado el concepto :( Esto es lo mejor que se me ocurrió. No estoy seguro de la cantidad de números con los que funciona, funcionó cuando puse cien dígitos
function count_digits(n) {
numDigits = 0;
integers = Math.abs(n);
while (integers > 0) {
integers = (integers - integers % 10) / 10;
numDigits++;
}
return numDigits;
}
editar: solo funciona con valores enteros
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 los números flotantes. Para que funcione, podemos deshacernos de un punto con String(number).replace(''.'', '''').length
, o contar los dígitos con la expresión regular: String(number).match(//d/g).length
.
En términos de velocidad, la forma más rápida de obtener el número de dígitos en un número dado es hacerlo matemáticamente. Para enteros positivos hay un maravilloso algoritmo 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 brillante optimizada de @Mwr247 , pero tenga cuidado al usar Math.log10
, ya que no es compatible con muchos navegadores heredados. Entonces, 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 la matemática de punto flotante , por lo que el enfoque de fundido a cuerda será más fácil y menos engañoso. Como se menciona en @streetlogics el fundido rápido se puede hacer con una simple concatenación de número a cadena, lo que lleva a la solución de reemplazo a transformarse en:
var length = (number + '''').replace(''.'', '''').length; // for floats