Мне нужно передать значение 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 байта? Или, может быть, я могу получить целое число при разборе строки? Какие-либо предложения?
Заранее спасибо!
Спасибо вам, ребята! Да, я забыл про упаковку / распаковку.
Это не совсем ответ, но он работает для моего случая:
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) — один и тот же результат.
Привет персонал, который я нашел вам, вероятно, не понравится
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/