在PHP中将十进制数转换为二进制数

时间:2011-07-03 17:00:43

标签: php while-loop

我有这个函数可以将数字从十进制转换为二进制。

<?php
function DecimalTOBinary($num)
{
    $a = "";
    $b = "";
    $x = 0;
    while ($num !=0)
    {
        $b .= $num % 2;
        $num = $num /2;
    }
    /*
    for($i = strlen($b) -1;$i >=0;$i--)
    {
        a .= substr($b,$i,$i +1);
    }*/
    return $b;

}
?>

我的问题是它会返回字符串:

010010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

我希望只返回:

0100101

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:5)

$num = $num / 2;可能会进行小数除法(隐式转换为 float ),导致$num接近0,但需要很长时间才能达到目标。将其$num = floor($num / 2);再舍回到整数

请注意,还有decbin(),这是实现此目的的内置方法。


示范性(但多余的):

function DecimalTOBinary($num)
{
    return decbin($num);
}

答案 1 :(得分:2)

如果出于实际原因需要该功能,请执行@Core Xii所说的内容。如果要实现要学习的函数,则应使用floor函数:$num = floor($num/2),因为PHP认为$num是一个浮点数并且不将其除以整数。< / p>

另外,您需要return strrev($b),因为您的数字会被颠倒。

答案 2 :(得分:0)

此功能可以满足您的需求:

<?php
function DecimalToBinary($num) {
    $i = "";
    while (floor($num) > 0) {
        $i .= $num % 2;
        $num /= 2;
    }
    return strrev($i);
}

主要变化是:

  • 在while循环检查中对数字进行地板检查
  • 反转数字。
  • 删除了不必要的变量。