Я использую функцию для преобразования шестнадцатеричных чисел в числа с плавающей запятой. Функция не дает мне правильное значение для (0x00000000). Я использую следующую функцию PHP.
function hex2float($number) {
$binfinal = sprintf("%032b",hexdec($number));
$sign = substr($binfinal, 0, 1);
$exp = substr($binfinal, 1, 8);
$mantissa = "1".substr($binfinal, 9);
$mantissa = str_split($mantissa);
$exp = bindec($exp)-127;
$significand=0;
for ($i = 0; $i < 24; $i++) {
$significand += (1 / pow(2,$i))*$mantissa[$i];
}
return $significand * pow(2,$exp) * ($sign*-2+1);
}
Вот как я называю функцию
echo hex2float("0x00000000");
Выход 5.8774717541114E-39 что неправильно.
Как мне получить 0,00 от этой функции?
Я нашел решение проблемы. Округление возвращаемого значения функции решило это для меня.
return round($significand * pow(2,$exp) * ($sign*-2+1), 3);
Других решений пока нет …