我想问一下如何获取整数中的数字长度。例如:
$num = 245354;
$numlength = mb_strlen($num);
在此示例中, $numlength
应为6。不知怎的,我无法管理它?
由于
编辑:上面的示例代码 - ^及其各自的方法mb_strlen();
正常运行。
答案 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
*/