我有这个函数可以将数字从十进制转换为二进制。
<?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
我怎样才能做到这一点?
答案 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);
}
主要变化是: