Как узнать количество цифр в числе php

PHP — Получить длину цифр в числе

Я хотел бы спросить, как я могу получить длину цифры в целом числе. Например:

$num = 245354; $numlength = mb_strlen($num); 

$numlength должно быть 6 в этом примере. Как-то я не могу заставить его работать?

РЕДАКТИРОВАТЬ: Пример кода выше -^ и его соответствующий метод mb_strlen(); работает просто отлично.

13 ответов

$num = 245354; $numlength = strlen((string)$num); 

Иногда помогает какая-то математика. Все, что вам нужно, это призвать floor(log10($num) + 1) с проверкой на 0.

$num = 12357; echo $num !== 0 ? floor(log10($num) + 1) : 1; 

В основном это делает логарифм с основанием 10, затем делает пол и добавляет 1.

Принятое решение представляет проблему при оценке отрицательных чисел.

Работает с положительным числом:

$num = 245354; $numlength = strlen((string)$num); // Result: 6 

Но с отрицательным числом (-) добавляется к счетчику:

$num = -245354; $numlength = strlen((string)$num); // Result: 7 
$num = -245354; $numlength = strlen((string)abs($num)); // Result: 6 

Вы также можете использовать базовую математику!

$digits = (int)(log($num,10)+1) echo "\n $num: " . digits($num); // 123: 3 echo "\n $num2:" . digits($num2); // 1234: 4 echo "\n $num3:" . digits($num3); // 12345: 5 echo "\n"; 

Другой способ узнать длину числа в цифрах — разделить целую часть числа на 10, пока оно не станет 0.

2021/10 = 202.1 202/10 = 20.2 20/10 = 2 2/10 = 0.2 
function numberGetLength($number) < $count = 0; while (intval($number) >0) < $number = intval($number) / 10; $count += 1; >return $count > 

Считать только целое число

 `"; $count = 0; while ($n1 != 0) < $n1 = $n1 / 10; $n1 = intval($n1); ++$count; >echo "The Digit in a Number: ".$count; > ?>` 

Просто используя какую-то версию (int)(log($num,10)+1) сбой для 10, 100, 1000 и т. д. Он считает число 10 как 1 цифру, 100 как две цифры и т. д. Также происходит сбой с 0 или любым отрицательным числом.
Если вы должны использовать математику (и число не отрицательное), используйте:
$numlength = (int)(log($num+1, 10)+1);

Или для математического решения, которое считает цифры в положительных или отрицательных числах:
$numlength = ($num>=0) ? (int)(log($num+1, 10)+1) : (int)(log(1-$num, 10)+1);

Но решение strlen в PHP примерно такое же быстрое.

В PHP типы свободно задаются и угадываются, если вы хотите видеть что-то в виде строки, если это целое число, число с плавающей запятой и (я не пробовал это) bool, тогда @Gorjunav является наиболее правильным ответом.

Сбросить переменную как строку

Тогда вы можете использовать любую строку, связанную с ней! И наоборот для замены строки на int

Следующая функция работает как для целых чисел, так и для чисел с плавающей точкой (подробности см. В комментариях):

/* Counts digits of a number, even floats. * $number: The number. * $dec: Determines counting digits: * 0: Without decimal * 1: Only decimal * 2: With decimal (i.e. all parts) */ // PHP5 function digits_count($number, $dec = 0) < $number = abs($number); $numberParts = explode(".", $number); if (!isset($numberParts[1])) $numberParts[1] = 0; return ($dec == 1 ? 0 : strlen($numberParts[0])) + ($dec == 0 ? 0 : strlen($numberParts[1])); >// PHP7 function digits_count($number, int $dec = 0) : int

Я рекомендую вам использовать PHP7, он короче и чище.

echo strlen((string) abs($num)); // using **abs** it'll work with negative integers as well 

Протестировано в PHP 4.4.9 — 8.0.0

$array = array(-1, 0, -0, 1, 4, 9, 10, -10, 20, -20, 100, -100); foreach( $array as $key => $num )< echo $key."\t\t=>\t".($num !== 0 ? floor(log10(abs($num)) + 1) : 1)."\n"; > /* Output: 0 -1 => 1 1 0 => 1 2 0 => 1 3 1 => 1 4 4 => 1 5 9 => 1 6 10 => 2 7 -10 => 2 8 20 => 2 9 -20 => 2 10 100 => 3 11 -100 => 3 */ 

Источник

PHP — Получить длину цифр в числе

$numlength должно быть 6 в этом примере. Почему-то я не могу справиться с этим? Спасибо EDIT: Пример кода выше — ^ и его соответствующий метод mb_strlen(); работает просто отлично.

Вместо того, чтобы давать много решений, у кого-то есть идея о том, «почему ЭТОТ код не работает?». Потому что код должен работать.

7 ответов

$num = 245354; $numlength = strlen((string)$num); 

Использование математических функций, таких как log() для меня нечитабельно. Я верю, что программист! = Математик

Иногда помогает какая-то математика. Все, что вам нужно, это вызвать floor(log10($num) + 1) с проверкой на 0.

$num = 12357; echo $num !== 0 ? floor(log10($num) + 1) : 1; 

В основном это делает логарифм с основанием 10, затем делает пол и добавляет 1.

Возможно, вы ошиблись с тестом. Я только что протестировал многие версии PHP (даже PHP4) с использованием двух онлайн-тестеров PHP; для нулевого значения выводится -INF. Чтобы быть уверенным, попробуйте log10 (0) === -INF ; ответ будет 1.

Вы также можете использовать базовую математику!

$digits = (int)(log($num,10)+1) echo "\n $num: " . digits($num); // 123: 3 echo "\n $num2:" . digits($num2); // 1234: 4 echo "\n $num3:" . digits($num3); // 12345: 5 echo "\n"; 

Как сказал Роберт, он не будет работать ни для одной из 10 ^ n числовых серий (n> = 0). Ноль тоже не сработает!

В PHP типы свободно задаются и угадываются, если вы хотите видеть что-то в виде строки, если это целое число, число с плавающей запятой и (я не пробовал это) bool, тогда @Gorjunav является наиболее правильным ответом.

Сбросить переменную как строку

Тогда вы можете использовать любую строку, связанную с ней! И наоборот для замены строки на int

Следующая функция работает как для целых чисел, так и для чисел с плавающей точкой (подробности см. В комментариях):

/* Counts digits of a number, even floats. * $number: The number. * $dec: Determines counting digits: * 0: Without decimal * 1: Only decimal * 2: With decimal (i.e. all parts) */ // PHP5 function digits_count($number, $dec = 0) < $number = abs($number); $numberParts = explode(".", $number); if (!isset($numberParts[1])) $numberParts[1] = 0; return ($dec == 1 ? 0 : strlen($numberParts[0])) + ($dec == 0 ? 0 : strlen($numberParts[1])); >// PHP7 function digits_count($number, int $dec = 0) : int

Я рекомендую вам использовать PHP7, он короче и чище.

Просто использование некоторой версии (int)(log($num,10)+1) не выполняется для 10, 100, 1000 и т.д. Он подсчитывает число 10 как 1 цифру, 100 как две цифры и т.д. Он также терпит неудачу с 0 или любым отрицательным числом.
Если вы должны использовать математику (и число неотрицательно), используйте:
$numlength = (int)(log($num+1, 10)+1);

Или для математического решения, которое подсчитывает цифры в положительных или отрицательных числах:
$numlength = ($num>=0) ? (int)(log($num+1, 10)+1) : (int)(log(1-$num, 10)+1);

Но решение strlen так же быстро работает в PHP.

Ещё вопросы

  • 0 Загрузка данных перед загрузкой контроллеров и представлений
  • 0 asp: текстовое содержимое ярлыка не отображается как
  • 0 PHP метод получения всегда 1?
  • 0 Получить значение атрибута внутри тега ввода с помощью JavaScript
  • 0 Как добавить прокручиваемый div внутри snap-контента, который исправлен?
  • 0 Почему `typename` все еще необходимо, даже если тип шаблона объявлен как` class`?
  • 0 Увеличение строк в базе данных
  • 0 как установить кнопку положения внизу?
  • 0 jQuery DatePicker проблема, когда на веб-странице используются несколько элементов с одинаковым именем класса
  • 0 Как эффективно вставить элементы в карту?
  • 1 Загрузка файла в asp.net C # — ошибка нулевой ссылки
  • 0 держать меню JavaScript открытым при загрузке новой страницы
  • 1 Недоступный файл
  • 1 Как вы LoadUserPofile из внутри NamePipeServerStream.RunAsClient?
  • 0 Угловые атрибуты по директивам
  • 0 PHP time () для Date / Time, возвращающих странные результаты
  • 0 Получить текст всех вариантов выбора элементов?
  • 0 Использование QRegExValidator для QLineEdit
  • 1 Потоки для медленных операций в приложении MVC
  • 0 Mysql создать представление, связывающее две таблицы
  • 0 Попытка заполнить выпадающий список JQuery и AJAX
  • 0 сбой линии связи mysql на 2 ноутбуках
  • 0 Сессионизация на основе событий, а не временных меток с MySQL
  • 1 Как сбросить статическое свойство только для чтения?
  • 1 Собственная библиотека не найдена в сборке Android?
  • 1 Панды слияния и суммирования данных
  • 1 Возможно ли, что getInstallerPackageName () имеет значение null, когда приложение загружено из Google Play Store?
  • 1 Секунда весны: перехватить URL-адрес легко обойти?
  • 0 По умолчанию работает только для 8 и 9. После этого он использует первое число и обрабатывает его как 1,2,3
  • 0 Как создать макет сайта с полным окном просмотра
  • 0 Как получить значение и идентификатор из текстовой области, которая использует строку базы данных в качестве идентификатора
  • 1 Невозможно заставить свинг отменить / повторить работу системы для простой программы рисования.
  • 0 Как я могу использовать Angularjs итерации строки JSON
  • 0 Значение переменной $ scope не обновляется в контроллере Angular JS?
  • 1 Сравнивайте телефонные номера без учета какого-либо формата в Linq с объектами, а также проверяйте производительность
  • 1 Обновление переменных Pytorch
  • 1 Фоновые геозоны действительно работают на Android 8+?
  • 0 Ionic / Angular App не читает данные JSON из API
  • 0 Angular — функция в зависимости или зависимость в параметрах функции?
  • 1 Наблюдаемые / LiveData видимости ActionBar?
  • 0 Knex MySQL Migration «Ошибка необработанного отклонения: запрос транзакции уже выполнен»
  • 0 Как передать экземпляры класса / структуры в качестве аргументов для обратных вызовов, используя boost :: bind?
  • 1 Адреса пользовательских значений перечисления по порядку
  • 1 Сохранение в DATABASE MVC шаблон
  • 0 Как передать вектор объектов в другой класс, а затем вызвать функцию внутри члена объекта в этом векторе?
  • 1 Задача «ConvertResourcesCases» неожиданно завершилась неудачей. Xamarin Android build
  • 0 PHP — Explode / substr / Filename
  • 0 Панель инструментов кнопки jquery UI с меню
  • 0 Проблема с кодировкой Facebook API
  • 0 Элемент Div отображается за пределами родительского элемента div

Источник

PHP — получить длину цифр в числе

Я хотел бы спросить, как я могу получить длину цифр в Integer. Например:

$num = 245354; $numlength = mb_strlen($num); 

$numlength в этом примере должно быть 6. Как-то не получается, чтобы он работал?

РЕДАКТИРОВАТЬ: Пример кода выше — ^ и соответствующий ему метод mb_strlen(); работают нормально.

10 ответов

$num = 245354; $numlength = strlen((string)$num); 
echo strlen((string) abs($num)); // using **abs** it'll work with negative integers as well 

Считать только целое число

 `"; $count = 0; while ($n1 != 0) < $n1 = $n1 / 10; $n1 = intval($n1); ++$count; >echo "The Digit in a Number: ".$count; > ?>` 

В PHP типы задаются свободно и предполагаются, если вы хотите видеть что-то в виде строки, если это целое число , float и (я не пробовал это) bool , тогда @Gorjunav — самый правильный ответ.

Сбросить переменную как строку

Затем вы можете использовать любую строку, которая вам нужна! И наоборот, для изменения строки на int

Следующая функция работает как с целыми числами, так и с числами с плавающей запятой (подробнее читайте в комментариях):

/* Counts digits of a number, even floats. * $number: The number. * $dec: Determines counting digits: * 0: Without decimal * 1: Only decimal * 2: With decimal (i.e. all parts) */ // PHP5 function digits_count($number, $dec = 0) < $number = abs($number); $numberParts = explode(".", $number); if (!isset($numberParts[1])) $numberParts[1] = 0; return ($dec == 1 ? 0 : strlen($numberParts[0])) + ($dec == 0 ? 0 : strlen($numberParts[1])); >// PHP7 function digits_count($number, int $dec = 0) : int

Я рекомендую вам использовать PHP7, он короче и чище.

Простое использование некоторой версии (int)(log($num,10)+1) не работает для 10, 100, 1000 и т. Д. Он считает число 10 как 1 цифру, 100 как две цифры и т. Д. Он также не работает с 0 или любым отрицательным числом.
Если вы должны использовать математику (а число неотрицательно), используйте:
$numlength = (int)(log($num+1, 10)+1);

Или для математического решения, которое считает цифры положительными ИЛИ отрицательными числами:
$numlength = ($num>=0) ? (int)(log($num+1, 10)+1) : (int)(log(1-$num, 10)+1);

Но решение strlen в PHP примерно такое же быстрое.

Вы также можете использовать базовую математику!

$digits = (int)(log($num,10)+1) echo "\n $num: " . digits($num); // 123: 3 echo "\n $num2:" . digits($num2); // 1234: 4 echo "\n $num3:" . digits($num3); // 12345: 5 echo "\n"; 

Принятое решение представляет проблему при оценке отрицательных чисел.

Работает с положительным числом:

$num = 245354; $numlength = strlen((string)$num); // Result: 6 

Но с отрицательным числом (-) добавляется к счетчику:

$num = -245354; $numlength = strlen((string)$num); // Result: 7 
$num = -245354; $numlength = strlen((string)abs($num)); // Result: 6 

Принятый ответ не подойдет для больших чисел. Лучший способ вычислить длину любого числа — вызвать floor(log10($num) + 1) с проверкой на 0 .

$num = 12357; echo $num !== 0 ? floor(log10($num) + 1) : 1; // prints 5 

У него множество преимуществ. Это быстрее, вы не выполняете приведение типов, он работает с большими числами, он работает с разными системами счисления, такими как bin, hex, oct.

Уравнение логарифмирует с основанием 10, затем вычисляет пол и добавляет 1.

Это решение может работать независимо от основания, поэтому, если вы хотите вычислить длину двоичного или шестнадцатеричного числа, просто измените основание логарифма.

Источник

Читайте также:  Thinking of java на русском
Оцените статью