2011-07-03 73 views
0

我有這個函數將數字從十進制轉換爲二進制。在PHP中將十進制數轉換爲二進制

<?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 

我怎樣才能做到這一點?

回答

5

$num = $num/2;可能確實分數劃分(隱式轉換爲浮動),導致$num接近0但採取了很長的時間去那裏。將它設爲$num = floor($num/2);將其舍入回整數

請注意,還有decbin(),實現此目的的內置方法。


示範性(但多餘的):

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

如果你想爲實際的原因是功能,做什麼@Core十二說。如果你想實現這個功能來學習,你應該使用floor函數:$num = floor($num/2),因爲PHP認爲$num是一個浮點數,並且不會將其整數分割。

此外,你會想要return strrev($b),因爲你的數字將被顛倒。

0

此功能會做你想要什麼:

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

的主要變化是:

  • 地板在while循環檢查
  • 倒車位數。
  • 刪除不必要的變量。
相關問題