web-dev-qa-db-ja.com

PHP-数字の桁数を取得する

整数の桁数を取得する方法を尋ねたいと思います。例えば:

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

この例では、_$numlength_は6でなければなりません。どういうわけか私はそれを動作するように管理できませんか?

ありがとう

EDIT:上記のサンプルコード-^およびそれぞれのメソッドmb_strlen();は正常に機能します。

19
supersize

多分:

$num = 245354;
$numlength = strlen((string)$num);
41
Sergei Gorjunov

いつかいくつかの数学が役立ちます。必要なのは、0をチェックしてfloor(log10($num) + 1)を呼び出すことです。

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

基本的には、10を底とする対数を実行し、その底を作成して1を加算します。

6
Robert

よりエレガントな方法:)

ceil(log10($num));
2
Halayem Anis

基本的な数学も使用できます!

$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
Carlos Vergara

In PHP型は大まかに設定され、推測されます。何かが文字列として表示される場合は、integerfloat、 (私はこれを試していません)boolそれから@Gorjunavが最も正しい答えです。

stringとして変数をリセットします

$stringNum = (string) $num;

それから、あなたはそれであなたが望むどんな関連するストリングでも行くことができます!また、文字列をintに変更する場合も同様です

$number = (int) $stringNum;

等々...

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を使用することをお勧めします。PHP7はより短くてクリーンです。

それが役に立てば幸い!

0
MAChitgarha

何らかのバージョンの_(int)(log($num,10)+1)_を使用すると、10、100、1000などで失敗します。10を1桁、100を2桁などとしてカウントします。0または負の数でも失敗します。
数学を使用する必要がある場合(および数値が負でない場合)、次を使用します。
$numlength = (int)(log($num+1, 10)+1);

または正のOR負の数の数字をカウントする数学ソリューションの場合:
$numlength = ($num>=0) ? (int)(log($num+1, 10)+1) : (int)(log(1-$num, 10)+1);

しかし、strlenソリューションはPHPとほぼ同じくらい高速です。

0
Jamie Ciocco