Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当与函数一起使用时,为什么在PHP中将十六进制0x00000000转换为浮点时会得到5.8774717541114E-39而不是0.00?_Php_Binary_Hex_Decimal_Floating Point Conversion - Fatal编程技术网

当与函数一起使用时,为什么在PHP中将十六进制0x00000000转换为浮点时会得到5.8774717541114E-39而不是0.00?

当与函数一起使用时,为什么在PHP中将十六进制0x00000000转换为浮点时会得到5.8774717541114E-39而不是0.00?,php,binary,hex,decimal,floating-point-conversion,Php,Binary,Hex,Decimal,Floating Point Conversion,我正在使用一个函数将十六进制数转换为浮点数。函数没有为(0x00000000)提供正确的值。我正在使用以下PHP函数 function hex2float($number) { $binfinal = sprintf("%032b",hexdec($number)); $sign = substr($binfinal, 0, 1); $exp = substr($binfinal, 1, 8); $mantissa = "1".substr($binfinal,

我正在使用一个函数将十六进制数转换为浮点数。函数没有为(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);
}
输出为5.8774717541114E-39,这是错误的


如何从该函数中获取0.00?

我找到了解决该问题的方法。四舍五入函数的返回值为我解决了这个问题

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