php中的Float.floatToIntBits或正确的方式在float中传递int值

时间:2015-02-12 20:43:13

标签: java php bit-manipulation

我需要将一个浮点内的int值从java代码传递给php。 原因是我必须使用的第三方API只接受浮点值。

在java中,我有以下代码,它按预期工作:

int i1 = (int) (System.currentTimeMillis() / 1000L);
float f = Float.intBitsToFloat(t);
int i2 = Float.floatToIntBits(f);
//i1 == i2

然后我将浮点值从Float.intBitsToFloat()传递给第三方API,并使用float将字符串发送到我的服务器:

  

“VALUE1”:1.4237714E9

在php中我接收并解析了许多这样的字符串并得到一个数组:

{
"value1" => 1.4237714E9, (Number)
"value2" => 1.4537614E9 (Number)
...
}

现在我需要为php中的每个元素制作Float.floatToIntBits(),但我不确定如何。这些php数字是4个字节长吗?或者也许我可以在从字符串解析时以某种方式获取整数?有什么建议? 提前谢谢!

2 个答案:

答案 0 :(得分:0)

谢谢你们,伙计们!是的,我忘记打包/打包了。 这不是一个真正的答案,但它适用于我的情况:

function floatToIntBits($float_val)
{
    $int = unpack('i', pack('f', $float_val));
    return $int[1];
}

但反之亦然!奇怪的是:

$i1 = 1423782793;
$bs =pack('i', $i);
$f = unpack('f', $bs);
//array { 1 => 7600419110912} while should be 7.6004191E12 (E replaced with 109?)
//or may be 7600419110000 which also right, but not 7600419110912!

我无法解释这一点。双重检查家庭系统和服务器(5.5和5.4 PHP) - 相同的结果。

答案 1 :(得分:0)

嗨,我发现你可能不喜欢的工作人员:

function FloatToHex1($data)
{
    return bin2hex(strrev(pack("f",$data)));
}
function HexToFloat1($data)
{
    $value=unpack("f",strrev(pack("H*",$data)));

    return $value[1];
}

//使用

echo HexToFloat1(FloatToHex1(7600419100000));

给出结果,如7600419110912

所以109不是E的替代,问题是用浮点重新计算数字。这听起来很有趣,但PHP重新计算可以为您提供最准确的答案。这是一个答案7600419110912

请阅读此帖以获取更多信息https://cycling74.com/forums/topic/probably-a-stupid-question-but/