Java — Float.floatToIntBits в php или правильный путь передать значение int внутри float

Мне нужно передать значение int внутри числа с плавающей запятой из Java-кода в PHP.
Причина в том, что сторонний API, который я должен использовать между ними, принимает только значения с плавающей точкой.

В Java у меня есть следующий код, который работает как положено:

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

Затем я передаю значение float из Float.intBitsToFloat () в сторонний API, и оно отправляет строку на мой сервер с помощью float:

«Значение1»: 1.4237714E9

В php я получаю и анализирую много таких строк и получаю массив:

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

Теперь мне нужно сделать Float.floatToIntBits () для каждого элемента в php, но я не уверен, как. Будут ли эти числа php длиной 4 байта? Или, может быть, я могу получить целое число при разборе строки? Какие-либо предложения?
Заранее спасибо!

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) — один и тот же результат.

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/

0