假设我有一个包含整数或浮点数的变量(因为整数可能会溢出到PHP中的浮点数).
我想运行一些操作来获取最左边的数字和其余的剩余数字.
为了更好地解释:
<?php
$x = NULL; //this will hold first digit
$num = 12345; //int
/// run operation
//outputs
//$x = 1;
//$num = 2345;
var_dump($x, $num);
?>
Run Code Online (Sandbox Code Playgroud)
现在,我知道有办法做到这一点群众,如果你代表一个字符串的数字,但我试图避免的类型转换成一个字符串.
我可能寻找一个解决方案,其中包括位操作,但我是个主题中相当薄弱,所以我希望有人谁通常工作低水平也许能回答这个问题!
谢谢一堆.
Pek*_*ica 11
我确定有一种方法可以做到这一点而不将其转换成字符串,但为什么呢?该string绕道是那么容易:
$x = (int)substr($num, 0, 1);
Run Code Online (Sandbox Code Playgroud)
它会给你一个漂亮的,正确的整数.
显然,这不会对错误输入进行扩展检查,并且需要$num是有效数字.
避免使用任何字符串操作,但不保证浮动甚至负值
$x = NULL; //this will hold first digit
$num = 12345; //int
$m = 1;
while(true) {
$m *= 10;
if ($m > $num)
break;
}
$m /= 10;
$x = (int) floor($num / $m);
$num = $num % $m;
//outputs
//$x = 1;
//$num = 2345;
var_dump($x, $num);
Run Code Online (Sandbox Code Playgroud)
数学方法:
function leftMost($num) {
return floor($num/pow(10,(floor((log10($num))))));
}
Run Code Online (Sandbox Code Playgroud)
解释我猜...
1+ log10的num计算一个数字的位数,我们将其置于删除任何十进制值的位置,将其作为指数,因此对于1位数字我们得到10 ^ 0 = 1,或者8位数字我们得到10 ^ 8.然后,我们只是分配12345678/10000000 = 1.2345678,它得到了底线,只有1.
注意:这适用于0到1之间的数字,它将在0.02中返回2,并且字符串转换将失败.
如果你想使用负数,首先使$ num = abs($ num).