Получить количество цифр с помощью 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?

Ответ 1

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

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

ОБНОВЛЕНИЕ:. Как обсуждалось в комментариях, приведенный выше пример не будет работать для чисел с плавающей запятой. Чтобы заставить его работать, мы можем либо избавиться от периода с помощью 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 решит проблему совместимости.

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

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

Ответ 2

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

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

Ответ 3

Так как это привело к поиску 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

Ответ 4

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

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

Ответ 5

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

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

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

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

Ответ 6

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

Ответ 7

Примечание: Эта функция будет игнорировать числа после десятичной средней точки. Если вы хотите считать с десятичной дробью, то удалите Math.floor(). Прямо к делу, проверьте это!

function digitCount ( num )
{
     return Math.floor( num.toString()).length;
}

 digitCount(2343) ;

//ES5+

 const digitCount2 = num => String( Math.floor( Math.abs(num) ) ).length;

 console.log(digitCount2(3343))

В основном Что здесь происходит. toString() и String() - одна и та же встроенная функция для преобразования цифры в строку, после того как мы конвертируем, мы найдем длину строки с помощью встроенной функции length.

Предупреждение: Но эта функция не будет работать должным образом для отрицательного числа, если вы пытаетесь играть с отрицательным числом, тогда проверьте этот ответ или просто вставьте в него Math.abs();

Подбодрить вас!

Ответ 8

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

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

Ответ 9

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

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

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

else{
  this.number = this.y;
}    

}

Ответ 10

Вот мое решение. Работает с положительными и отрицательными числами. Надеюсь, это поможет

function findDigitAmount(num) {

   var positiveNumber = Math.sign(num) * num;
   var lengthNumber = positiveNumber.toString();

 return lengthNumber.length;
}


(findDigitAmount(-96456431);    // 8
(findDigitAmount(1524):         // 4

Ответ 11

Свойство 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