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

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

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

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

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

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

84 голоса | спросил bit4fox 14 FebruaryEurope/MoscowbThu, 14 Feb 2013 20:39:18 +0400000000pmThu, 14 Feb 2013 20:39:18 +040013 2013, 20:39:18

8 ответов


0

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 , быстрое приведение может быть выполнено с простой конкатенацией чисел и строк, приводя replace решение, которое будет преобразовано в:

var length = (number + '').replace('.', '').length;  // for floats
ответил VisioN 14 FebruaryEurope/MoscowbThu, 14 Feb 2013 20:39:43 +0400000000pmThu, 14 Feb 2013 20:39:43 +040013 2013, 20:39:43
0

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

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, ''));
ответил Mwr247 29 Jam1000000amThu, 29 Jan 2015 01:14:30 +030015 2015, 01:14:30
0

Так как в поиске 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
ответил streetlogics 2 Mayam14 2014, 01:17:09
0

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

function countDigits(number) {
    var sp = (number + '').split('.');
    if (sp[1] !== undefined) {
        return sp[1].length;
    } else {
        return 0;
    }
}
ответил Maciej Maciej 12 +03002015-10-12T10:59:22+03:00312015bEurope/MoscowMon, 12 Oct 2015 10:59:22 +0300 2015, 10:59:22
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: работает только с целочисленными значениями

ответил Nate 4 32015vEurope/Moscow11bEurope/MoscowWed, 04 Nov 2015 20:35:17 +0300 2015, 20:35:17
0
  

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
  

ответил user40521 22 Maypm16 2016, 15:01:07
0

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

const zeroDigit = num => num.toString().length === 1 ? `0${num}` : num;
ответил Rafael Melón 5 J0000006Europe/Moscow 2018, 13:17:18
0

Свойство 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
ответил Muhammad Awais 2 J0000006Europe/Moscow 2016, 09:23:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132