Ответ 1
Может быть:
$num = 245354;
$numlength = strlen((string)$num);
Я хотел бы спросить, как я могу получить длину цифр в Integer. Например:
$num = 245354;
$numlength = mb_strlen($num);
$numlength
должно быть 6 в этом примере. Почему-то я не могу справиться с этим?
Спасибо
EDIT: Пример кода выше - ^ и его соответствующий метод mb_strlen();
работает просто отлично.
Может быть:
$num = 245354;
$numlength = strlen((string)$num);
Принятый ответ не будет работать с большими числами. Лучший способ вычислить длину любого числа - вызвать floor(log10($num) + 1)
с проверкой для 0
.
$num = 12357;
echo $num !== 0 ? floor(log10($num) + 1) : 1; // prints 5
У него есть несколько преимуществ. Это быстрее, вы не выполняете приведение типов, оно работает с большими числами, оно работает с различными системами счисления, такими как bin, hex, oct.
Уравнение делает логарифм с основанием 10, затем составляет половину и добавляет 1.
Это решение может работать независимо от основания, поэтому, если вы хотите вычислить длину двоичного или шестнадцатеричного кода, просто измените основание логарифма.
Более элегантный способ:)
ceil(log10($num));
Вы также можете использовать базовую математику!
$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";
Просто использование некоторой версии (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.
Следующая функция работает как для целых чисел, так и для чисел с плавающей точкой (подробности см. В комментариях):
/* 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, он короче и чище.
Надеюсь, поможет!
В PHP типы свободно задаются и угадываются, если вы хотите видеть что-то в виде строки, если это целое число, число с плавающей запятой и (я не пробовал это) bool, тогда @Gorjunav является наиболее правильным ответом.
Сбросить переменную как строку
$stringNum = (string) $num;
Тогда вы можете использовать любую строку, связанную с ней! И наоборот для замены строки на int
$number = (int) $stringNum;
и так далее...