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


как следует из названия моего поста, я хотел бы знать, сколько цифр var number есть. Например: если 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 78

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

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

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

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

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

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 не использует строку.длина() 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