PHP最左边的数字

Jea*_*lea 6 php digits

假设我有一个包含整数或浮点数的变量(因为整数可能会溢出到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是有效数字.


Mar*_*ker 9

避免使用任何字符串操作,但不保证浮动甚至负值

$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)


Inc*_*ito 8

数学方法:

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).