簡體   English   中英

PHP - 獲取數字中的數字長度

[英]PHP - Get length of digits in a number

我想問一下如何獲得整數中的數字長度。 例如:

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

在此示例中, $numlength應為 6。 不知何故我無法管理它工作?

謝謝

編輯:上面的示例代碼 --^ 及其各自的方法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。

該解決方案可以在基數上獨立工作,因此如果要計算二進制或十六進制的長度,只需更改對數的基數。

工作小提琴

在評估負數時,公認的解決方案會出現問題。

它適用於正數:

$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

更優雅的方式:)

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

找出數字長度的另一種方法是將數字的整數部分除以 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
}

僅使用(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 中的速度幾乎一樣快。

以下函數適用於整數或浮點數(適用於 PHP7+):

function digitsCount($number): int
{
    $number = abs($number);
    $numberParts = explode(".", $number);

    return
        strlen($numberParts[0]) +
        (strlen($numberParts[1] ?? 0));
}

在 PHP 中,類型是松散設置和猜測的,如果您想將某些內容視為字符串,如果它是integerfloat和(我沒有嘗試過) bool那么@Gorjunav 是最正確的答案。

將變量重置為字符串

$stringNum = (string) $num;

然后你可以去任何你想要的與它相關的字符串! 反之亦然,將字符串更改為 int

$number = (int) $stringNum;

等等...

只計算整數值

  `<?php
        $n1 =12345;
        $n2 =123454.55;
        $n3 =12345564.557;
        echo "The Number you Type: ".$n1."<br>";
        $count = 0; 
        while ($n1 != 0)  
        { 
            $n1 = $n1 / 10;
            $n1 = intval($n1);
            ++$count; 
        } 
        echo "The Digit in a Number: ".$count;
    }
    ?>`
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{$num}\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
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM