PHP - 获取数字中的数字长度

时间:2015-02-10 14:12:30

标签: php numbers string-length

我想问一下如何获取整数中的数字长度。例如:

$num = 245354;
$numlength = mb_strlen($num);
在此示例中,

$numlength应为6。不知怎的,我无法管理它?

由于

编辑:上面的示例代码 - ^及其各自的方法mb_strlen();正常运行。

12 个答案:

答案 0 :(得分:39)

也许:

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

答案 1 :(得分:6)

某些数学有时会有所帮助。您需要的一切是调用floor(log10($num) + 1)并检查0.

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

基本上它与基数10的对数然后使其成为平局并增加1.

答案 2 :(得分:1)

更优雅的方式:)

ceil(log10($num));

答案 3 :(得分: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";

答案 4 :(得分:1)

另一种找出数字长度的方法是将数字的整数部分除以 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
}

答案 5 :(得分:0)

只使用某个版本的(int)(log($num,10)+1)会因10,100,1000等而失败。它将数字10计为1位数,将100计为2位数等。它也会因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一样快。

答案 6 :(得分: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,它更短更干净。

希望有帮助!

答案 7 :(得分:0)

在PHP中,类型是松散地设置和猜测的,如果您想以字符串形式查看某个东西,如果它是 integer float 和(我没有尝试过),那么@Gorjunav是最正确的答案。

将变量重置为 string

$stringNum = (string) $num;

然后,您可以使用与它相关的任何字符串!反之亦然,将字符串更改为int

$number = (int) $stringNum;

以此类推...

答案 8 :(得分:0)

公认的解决方案在评估负数时会出现问题。

它可以使用正数:

$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

答案 9 :(得分:0)

仅计算整数值

  `<?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;
    }
    ?>`

答案 10 :(得分:0)

var zipString = ''
var zlib = require('zlib')
var {Buffer} = require('buffer')
const buff = Buffer.from(zipString, 'base64');
console.log('传给服务端的base64:', zipString)
zlib.inflate(buff, (err, buffer) => { 
    var unzipString = buffer.toString('utf8'); 
    console.log('解压缩的数据: ',unzipString)
    zlib.deflate(unzipString, (err, buffer) => { 
        console.log('重新进行压缩:', buffer)
        const base64 = buffer.toString('base64');
        console.log('重新压缩后传给服务端的base64(经检验服务端可以解压):', base64);
    });
}); 

答案 11 :(得分:0)

在 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
*/