бинарный — почему преобразование Hex 0x00000000 в число с плавающей точкой дает 5,8774717541114E-39 вместо 0,00 в PHP при использовании с функцией?

Я использую функцию для преобразования шестнадцатеричных чисел в числа с плавающей запятой. Функция не дает мне правильное значение для (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 от этой функции?

0

Решение

Я нашел решение проблемы. Округление возвращаемого значения функции решило это для меня.

return round($significand * pow(2,$exp) * ($sign*-2+1), 3);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector