Получить количество цифр с помощью JavaScript

как следует из названия моего поста, я хотел бы знать, сколько цифр var number есть. Например: If number = 15; моя функция должна возвращать 2. В настоящее время это выглядит так:

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

но Safari говорит, что он не работает из-за TypeError:

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

Как видите, '2' на самом деле правильное решение. Но почему это not a function?

9 ответов


length является свойством, а не методом. Вы не можете его назвать, поэтому вам не нужны скобки ():

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

обновление: как уже обсуждалось в комментариях, приведенный выше пример не будет работать для чисел типа float. Чтобы заставить его работать, мы можем либо избавиться от периода с String(number).replace('.', '').length, или подсчитайте цифры с регулярным выражением:String(number).match(/\d/g).length.

С точки зрения скорости, потенциально самый быстрый способ получить количество цифр в заданном кол-делать это математически. Для положительные целые числа есть замечательный алгоритм с log10:

var length = Math.log(number) * Math.LOG10E + 1 | 0;  // for positive integers

для всех типов целых чисел (включая отрицательные) есть блестящее оптимизированное решение от @Mwr247, но будьте осторожны с использованием Math.log10, поскольку он не поддерживается многими устаревшими браузерами. Так что замена Math.log10(x) С Math.log(x) * Math.LOG10E решит проблему совместимости.

создание быстрых математических решений для десятичных чисел не будет легко из-за хорошо известное поведение математики с плавающей запятой, поэтому подход cast-to-string будет более простым и надежным. Как упоминалось @streetlogics быстрое литье можно сделать с помощью простого числа для конкатенации строк, ведущего заменить решение для преобразования в:

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

вот математический ответ (также работает для отрицательных чисел):

function numDigits(x) {
  return Math.max(Math.floor(Math.log10(Math.abs(x))), 0) + 1;
}

и оптимизированная версия выше (более эффективные операции побитового):

function numDigits(x) {
  return (Math.log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;
}

по существу, мы начинаем с получения абсолютного значения ввода, чтобы позволить отрицательным значениям работать правильно. Затем мы запускаем операцию log10, чтобы дать нам, какая мощность 10 входных данных (если вы работали в другой базе, вы бы использовали логарифм для этой базы), который является количество цифр. Затем мы наполним вывод, чтобы захватить только целочисленную часть этого. Наконец, мы используем функцию max для фиксации десятичных значений (любое дробное значение от 0 до 1 просто возвращает 1 вместо отрицательного числа) и добавляем 1 к конечному выходу, чтобы получить счет.

вышеизложенное предполагает (на основе вашего примера ввода), что вы хотите подсчитать количество цифр в целых числах (так 12345 = 5, и, следовательно, 12345.678 = 5). Если вы хотите подсчитать общее количество цифр в значение (так 12345.678 = 8), затем добавьте это перед "возвращением" в любой функции выше:

x = Number(String(x).replace(/[^0-9]/g, ''));

поскольку это появилось в поиске Google для "javascript получить количество цифр", я хотел бросить его там, что есть более короткая альтернатива этому, которая зависит от внутреннего кастинга, который будет сделан для вас:

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);

доходность

3 4

Если вам нужны цифры (после разделителя), вы можете просто разделить номер и подсчитать длину второй части (после точки).

function countDigits(number) {
    var sp = (number + '').split('.');
    if (sp[1] !== undefined) {
        return sp[1].length;
    } else {
        return 0;
    }
}

Я все еще изучаю Javascript, но я придумал эту функцию в C некоторое время назад, которая использует математику и цикл while, а не строку, поэтому я переписал ее для Javascript. Возможно, это можно было бы сделать рекурсивно, но я все еще не понял концепцию: (это лучшее, что я мог придумать. Я не уверен, насколько большими числами он работает, он работал, когда я вставлял сто цифр.

function count_digits(n) {
    numDigits = 0;
    integers = Math.abs(n);

    while (integers > 0) {
        integers = (integers - integers % 10) / 10;
        numDigits++;
    }
    return numDigits;
}

edit: работает только с целочисленными значениями


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


две цифры: простая функция, если вам нужны две или более цифр числа с ECMAScript 6 (ES6):

const zeroDigit = num => num.toString().length === 1 ? `0${num}` : num;

постановка задачи: Count number / string не использует строку.length () jsfunction. Решение: мы могли бы сделать это через Forloop. е.г

for (x=0; y>=1 ; y=y/=10){
  x++;
}

if (x <= 10) {
  this.y = this.number;                
}   

else{
  this.number = this.y;
}    

}


свойство length возвращает длину строки (количество символов).

длина пустой строки равна 0.

var str = "Hello World!";
var n = str.length;

результатом n будет: 12

    var str = "";
    var n = str.length;

результатом n будет: 0


свойство длины массива:


наборы свойств length или возвращает количество элементов в матрица.

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;

результат будет: 4

синтаксис:

возвращает длину массива:

array.length

установить длину массива:

array.length=number