当与函数一起使用时,为什么在PHP中将十六进制0x00000000转换为浮点时会得到5.8774717541114E-39而不是0.00?
我正在使用一个函数将十六进制数转换为浮点数。函数没有为(0x00000000)提供正确的值。我正在使用以下PHP函数当与函数一起使用时,为什么在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,
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);