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.
Это решение может работать независимо от основания, поэтому, если вы хотите вычислить длину двоичного или шестнадцатеричного числа, просто измените основание логарифма.