如何将浮点转换为64位二进制或32位浮点转换为64位int-php

如何将浮点转换为64位二进制或32位浮点转换为64位int-php,php,floating-point,binary,Php,Floating Point,Binary,我有一个浮点变量,它的值是:8546033237 我想将其转换为64位二进制,并使用这种方式将其转换为二进制: $a = 8546033237; $b = pack("f",$a); 这样给我一个32位的值,而不是64位。 然后当我把它转换回数字时,给我这个: $a = unpack("f",$b); var_dump($a); 结果是:浮动8546033152 结果与初始值不相等 现在,如何正确地将其转换为64位二进制,反之亦然???在手册中,您的答案是93085我使用这种方式将32位浮点

我有一个浮点变量,它的值是:8546033237

我想将其转换为64位二进制,并使用这种方式将其转换为二进制:

$a = 8546033237;
$b = pack("f",$a);
这样给我一个32位的值,而不是64位。 然后当我把它转换回数字时,给我这个:

$a = unpack("f",$b);
var_dump($a);
结果是:浮动8546033152

结果与初始值不相等


现在,如何正确地将其转换为64位二进制,反之亦然???

在手册中,您的答案是93085

我使用这种方式将32位浮点转换为64位二进制:

function float2binary64($in){
        $k = '';
        while (!in_array($in,array(0,1))) {
            $k .= abs($in % 2);
            $in = floor($in / 2);
        }
        $k .= $in;

        $j = strlen($k);
        for($i=0; $i< (64-$j); $i++){
            $k .="0";
        }

        $j = 0;$l[$j] = '';$m=0;
        for($i=63; $i>= 0; $i--){
            if ($m == 32) {$j++; $l[$j] = '';$m=0;}

            $l[$j] .= $k[$i];
            $m++;
        }
        $high = bindec($l[0]);
        $low = bindec($l[1]);
        $bin = pack("N*",$high,$low);

        return $bin;
}

我读过它,但我不明白如何使用它将浮点转换成二进制。请解释更多您的服务器是支持64位的机器和PHP发行版吗?不,我的PHP版本是5.4.3,不支持64位整数