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);
更优雅的方式:)
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";
已接受的答案不适用于大数字。计算任何数字长度的更好方法是调用 floor(log10($num) + 1)
并检查 0
。
$num = 12357;
echo $num !== 0 ? floor(log10($num) + 1) : 1; // prints 5
它有很多优点。它更快,你不需要进行类型转换,它适用于大数字,它适用于不同的数字系统,如 bin、hex、oct。
方程以 10 为底数取对数,取底并加 1。
这个解决方案可以在底数上独立工作,所以如果你想计算二进制或十六进制的长度,只需改变对数的底数即可。
仅使用某些版本的 (int)(log($num,10)+1)
无法计算 10、100、1000 等。它将数字 10 计为一位数,将 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 中,类型是松散设置和猜测的,如果你想将某些东西视为字符串,如果它是 integer,float,和(我没试过这个)bool 然后@Gorjunav 是最正确的答案。
将变量重置为 字符串
$stringNum = (string) $num;
然后你可以用它来做任何你想要的字符串相关的事情!反之亦然,将字符串更改为 int
$number = (int) $stringNum;
等等...
接受的解决方案在评估负数时出现问题。
它适用于正数:
$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
只计算整数值
`<?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
另一种计算数字长度的方法是将数字的整数部分除以 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
}
在 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
*/
我认为这更简单
strlen(slrval($num))
我想问一下如何获取整数中数字的长度。例如:
$num = 245354;
$numlength = mb_strlen($num);
$numlength
在此示例中应为 6。不知何故我无法让它工作?
谢谢
编辑: 上面的示例代码 --^ 及其各自的方法 mb_strlen();
工作得很好。
也许:
$num = 245354;
$numlength = strlen((string)$num);
更优雅的方式:)
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";
已接受的答案不适用于大数字。计算任何数字长度的更好方法是调用 floor(log10($num) + 1)
并检查 0
。
$num = 12357;
echo $num !== 0 ? floor(log10($num) + 1) : 1; // prints 5
它有很多优点。它更快,你不需要进行类型转换,它适用于大数字,它适用于不同的数字系统,如 bin、hex、oct。
方程以 10 为底数取对数,取底并加 1。
这个解决方案可以在底数上独立工作,所以如果你想计算二进制或十六进制的长度,只需改变对数的底数即可。
仅使用某些版本的 (int)(log($num,10)+1)
无法计算 10、100、1000 等。它将数字 10 计为一位数,将 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 中,类型是松散设置和猜测的,如果你想将某些东西视为字符串,如果它是 integer,float,和(我没试过这个)bool 然后@Gorjunav 是最正确的答案。
将变量重置为 字符串
$stringNum = (string) $num;
然后你可以用它来做任何你想要的字符串相关的事情!反之亦然,将字符串更改为 int
$number = (int) $stringNum;
等等...
接受的解决方案在评估负数时出现问题。
它适用于正数:
$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
只计算整数值
`<?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
另一种计算数字长度的方法是将数字的整数部分除以 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
}
在 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
*/
我认为这更简单
strlen(slrval($num))