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

Вопрос:Я хотел бы спросить, как я могу получить длину цифр в Integer. Например: $num = 245354; $numlength = mb_strlen($num); $numlength должно быть 6 в этом примере. Почему-то я не могу справиться с этим? Спасибо EDIT: Пример кода выше - ^ и его соответствующий метод mb_strlen(); работает просто отлично. Лучший ответ: Может быть: $num = 245354;

Вопрос:

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

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

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

Спасибо

EDIT: Пример кода выше – ^ и его соответствующий метод mb_strlen(); работает просто отлично.

Лучший ответ:

Может быть:

$num = 245354; $numlength = strlen((string)$num); Ответ №1

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

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

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

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

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

Рабочая скрипка

Ответ №2

Более элегантный способ:)

ceil(log10($num)); Ответ №3

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

$digits = (int)(log($num,10)+1) <?php $num = 123; $num2 = 1234; $num3 = 12345; function digits($num){ return (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»; Ответ №4

Просто использование некоторой версии (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.

Ответ №5

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

/* 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 { $number = abs($number); $numberParts = explode(«.», $number); return ($dec == 1 ? 0 : strlen($numberParts[0])) + ($dec == 0 ? 0 : strlen($numberParts[1] ?? 0)); }

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

Надеюсь, поможет!

Ответ №6

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

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

$stringNum = (string) $num;

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

$number = (int) $stringNum;

и так далее…

Оцените статью
Добавить комментарий