php 进制转换出现问题

PHP 内置函数
转十进制转二进制
decbin()
二进制转10进制
bindec()

 var_dump(bindec(decbin("0.1")));
 这里转换结果是 0 ,难道不能进行小数的转换吗? 
 

有什么解决方法吗?

阅读 4.8k
3 个回答

确实不能转换小数。

为什么不考虑直接将十六进制转换为2进制呢?

这种情况也可以考虑将小数乘以10的倍数使其成为整数,再进行进制转换

base_convert — 在任意进制之间转换数字
string base_convert( string $number, int $frombase, int $tobase)

十进制转换为16进制 支持浮点数
$dec = 1.12;
echo base_convert($dec,10,16);

小数部分会当做整数来处理

php自带的函数只能转换整数不能正确转换小数,如果是小数需要自己拆分整数部分和小数部分,按转换规则分别处理后再合并。

function hex_dec($str)
{
    list($int,$hex)=explode('.',$str);
    $temp=0;
    for($i=0;$i < strlen($hex); $i++)
    {
        $digit=hexdec(substr($hex,$i,1))/16;
        $temp += $digit/pow(16,$i);
    }
    return hexdec($int)+$temp;
}

function dec_hex($str)
{
    $int = intval($str);
    $hex = $str - $int;
    $float = '';
    while($hex!=0){
        $temp = $hex*16;
        $float .= dechex(intval($temp));
        $hex = $temp - intval($temp);
    }
    $float = !empty($float)?'.'.$float:'';
    return dechex($int).$float;
}

echo dec_hex("58.11");
echo '<br/>';
echo hex_dec("3a.1c28f5c28f5c");
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题