我需要将一个浮点内的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个字节长吗?或者也许我可以在从字符串解析时以某种方式获取整数?有什么建议? 提前谢谢!
答案 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/