Yo estoy buscando para obtener la longitud de un número en JavaScript o jQuery?

He intentado value.length sin ningún éxito, necesito convertir esto en una cadena de primero?

  • Sí, convertirlo en una cadena. El concepto de un número «longitud» sólo tiene sentido en términos de número de esquema de representación.
InformationsquelleAutor Code Junkie | 2012-06-08

13 Comentarios

  1. 257
    var x = 1234567;
    
    x.toString().length;

    Este proceso también funciona paraFloat Number y para Exponential number también.

    • +1. En caso de que no es obvio para cualquier persona, el punto decimal en carrozas serán contados en la longitud de la cadena. por ejemplo, 2.5.toString().la longitud de las salidas 3.
    • supongo que de Matemáticas.piso() iba a arreglar eso: Matemáticas.piso(99.5454).toString().longitud === 2
    • Esta solución no iba a trabajar con gran número pequeño número que tiene más de 20 dígitos. por ejemplo. 1.2 e+22 toString().la longitud de las salidas 7
    • También tomar nota de esto es extremadamente lento. Hice una prueba en el nodo y resulta que es más de 1200% más lento que Arturs respuesta.
    • cuando doy 00012 dice de longitud 2 ¿por qué??????????
    • No funciona si el número empieza por 0

  2. 64

    Ok, así que muchas respuestas, pero esto es pura matemática, sólo para la diversión o para recordar que la Matemática es Importante:

    var len = Math.ceil(Math.log(num + 1) / Math.LN10);

    Esto en realidad le da la «longitud» de la serie, incluso si es en forma exponencial. num se supone que es para que no sea un número entero negativo aquí: si es negativo, se toma su valor absoluto y ajustar la señal después.

    Actualización para ES2015

    Ahora que Matemáticas.log10 es una cosa, usted puede simplemente escribir

    const len = Math.ceil(Math.log10(num + 1));
    • creo que esta pura matemática es la más eficiente y más rápido.
    • Nope! Acabo de prueba: jsperf.com/number-of-digits-in-number
    • Awesme perf gracias hombre. Los resultados que obtuve mostrar las matemáticas de manera que es fastet, es este el resultado que obtuvo? aquí está mi resultado: i.imgur.com/9BKxyd3.png
    • ¡Oh, que bonito. Veo que el método es básicamente una de matemáticas de todos modos, pero con algunos hacks de velocidad. Cae un Math.ceil y utiliza un más rápido Math.abs lugar. Pero, sinceramente, no esperaba que el aumento de rendimiento en Chrome… es bueno saber!
    • Perfecto, pero da 0 si te número es 0 en lugar de 1
    • En la 1e+16 o más da 1 menos, así que 10000000000000000 devuelve 16 en lugar de 17, y así sucesivamente…
    • Esta solución tiene varias limitaciones, de hecho. Primero de todo, como se mencionó en la respuesta, no tratar con números racionales. Representación limitaciones son otro tema. Su propósito es ser más como una respuesta teórica más que práctica, sólo para recordar que un truco matemático a veces puede resolver sus problemas en una inusual (pero tal vez mejor) manera.
    • No devolver la cuenta después de punto, por ejemplo 1111.01, volver 4 en vez de 6
    • como ya he dicho, «num se supone que es para que no sea un número entero negativo».

  3. 11

    Usted tiene que hacer el número de la cadena con el fin de tomar longitud

    var num = 123;
    
    alert((num + "").length);

    o

    alert(num.toString().length);
  4. 10

    He estado usando esta funcionalidad en node.js este es mi más rápida implementación hasta el momento:

    var nLength = function(n) { 
        return (Math.log(Math.abs(n)+1) * 0.43429448190325176 | 0) + 1; 
    }

    Se debe manejar números enteros positivos y negativos (también en forma exponencial) y debe devolver la longitud de la parte entera en la flota.

    La siguiente referencia debe proporcionar alguna información sobre el método:
    Weisstein, Eric W. «La Longitud Del Número.» De MathWorld–Una Wolfram Los Recursos De La Web.

    Creo que algunos operación bit a bit puede sustituir a la de Matemáticas.abs, pero jsperf muestra que las Matemáticas.abs funciona bien en la mayoría de js motores.

    Actualización: Como se señaló en los comentarios, esta solución tiene algunas problemas 🙁

    Update2 (solución) : yo creo que en algún punto de la precisión de los problemas de la patada y el Math.log(...)*0.434... sólo se comporta de forma inesperada. Sin embargo, si el Explorador de Internet o dispositivos Móviles no son su taza de té, usted puede reemplazar esta operación con la Math.log10 función. En Node.js me escribió una rápida prueba básica con la función nLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0; y con Math.log10 funcionó como se esperaba. Por favor, tenga en cuenta que Math.log10 no es universalmente compatible.

    • Como curiosidad he realizado un JsPerf con nLength método vs toString().la longitud de esta….jsperf.com/convert-number-to-string-and-get-length/2
    • Jaja, eso es, básicamente, la solución que he proporcionado! Yo no tenía idea de que podría realizar tan bien.
    • Lo siento, ¿puedo decir algo acerca de mí la invención de la solución o algo por el estilo? ¿Por qué no leer cuidadosamente antes de publicar? Para el asunto, el algorhythm fue descubierto en el camino antes de Steven Wolfram incluso de nacer, y de todos modos la página que enlaza ¿no proporcionar una solución en Javascript. yo hizo, 9 meses antes.
    • El «+1» se debe, probablemente, fuera de las Matemáticas.abs llamada: Matemáticas.registro(de Matemáticas.abs(n) + 1)…
    • tienes toda la razón, de lo contrario nLength(10) != nLength(-10).
    • En la 1e+16 o más da 1 menos, así que 10000000000000000 devuelve 16 en lugar de 17, y así sucesivamente…
    • Para ser honesto, me acabo de ejecutar el código y me empieza a portarse mal en la 1e+14: > nLength(1e+14) 15 > nLength(1e+15) 15
    • He incluido algunas actualizaciones para solucionar el problema que ha denunciado.

  5. 5

    Bien sin necesidad de convertir el entero a una cadena, se podría hacer un funky bucle:

    var number = 20000;
    var length = 0;
    for(i = number; i > 1; ++i){
         ++length;
         i = Math.floor(i/10);
    }
    
    alert(length);​

    Demo: http://jsfiddle.net/maniator/G8tQE/

    • Esto no va a manejar la longitud de cualquier parte fraccionaria …
    • sí, esto es suponiendo es un entero. Incluso si usted hace una cadena, se incluirá el . como parte del cálculo.
    • sí, a pesar de lo interesante de la cuestión filosófica de si el punto debe ser incluido en el «longitud» 🙂
  6. 4

    Primera convertir en una cadena:

    var mynumber = 123;
    alert((""+mynumber).length);

    La adición de una cadena vacía para que implícitamente causa mynumber a su vez en una cadena.

    • No funciona con exponenciales como 1e+16 que devuelve 5.
  7. 2

    Me gustaría corregir la @Neal respuesta, que era bastante bueno para los números enteros, pero el número 1 devolvería una longitud de 0 en el caso anterior.

    function Longueur(numberlen)
    {
        var length = 0, i; //define `i` with `var` as not to clutter the global scope
        numberlen = parseInt(numberlen);
        for(i = numberlen; i >= 1; i)
        {
            ++length;
            i = Math.floor(i/10);
        }
        return length;
    }
  8. 2

    Tres métodos diferentes, todos con varrying velocidad.

    //34ms
    let weissteinLength = function(n) { 
    return (Math.log(Math.abs(n)+1) * 0.43429448190325176 | 0) + 1;
    }
    //350ms
    let stringLength = function(n) {
    return n.toString().length;
    }
    //58ms
    let mathLength = function(n) {
    return Math.ceil(Math.log(n + 1) / Math.LN10);
    }
    //Simple tests below if you care about performance.
    let iterations = 1000000;
    let maxSize = 10000;
    //------ Weisstein length.
    console.log("Starting weissteinLength length.");
    let startTime = Date.now();
    for (let index = 0; index < iterations; index++) {
    weissteinLength(Math.random() * maxSize);
    }
    console.log("Ended weissteinLength length. Took : " + (Date.now() - startTime ) + "ms");
    //------- String length slowest.
    console.log("Starting string length.");
    startTime = Date.now();
    for (let index = 0; index < iterations; index++) {
    stringLength(Math.random() * maxSize);
    }
    console.log("Ended string length. Took : " + (Date.now() - startTime ) + "ms");
    //------- Math length.
    console.log("Starting math length.");
    startTime = Date.now();
    for (let index = 0; index < iterations; index++) {
    mathLength(Math.random() * maxSize);
    }
  9. 0

    Sí, usted necesita para convertir a cadena con el fin de encontrar la longitud.Por ejemplo

    var x=100;//type of x is number
    var x=100+"";//now the type of x is string
    document.write(x.length);//which would output 3.
  10. 0

    Que se me hizo una pregunta similar en una prueba.

    Encontrar un número de longitud sin necesidad de convertir a cadena

    const numbers = [1, 10, 100, 12, 123, -1, -10, -100, -12, -123, 0, -0]
    const numberLength = number => {
    let length = 0
    let n = Math.abs(number)
    do {
    n /=  10
    length++
    } while (n >= 1)
    return length
    }
    console.log(numbers.map(numberLength)) //[ 1, 2, 3, 2, 3, 1, 2, 3, 2, 3, 1, 1 ]

    Números negativos se han añadido a complicar un poco más, por lo tanto las Matemáticas.abs().

Dejar respuesta

Please enter your comment!
Please enter your name here