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

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

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

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

Спасибо

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

13

Решение

Может быть:

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

Другие решения

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

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

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

5

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

ceil(log10($num));
1

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

$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";
1

Просто используя какую-то версию (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

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

/* 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, он короче и чище.

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

0
По вопросам рекламы [email protected]