js怎样将十六进制数转化为浮点数?

js怎样将十六进制数转化为浮点数?

阅读 6k
1 个回答

首先要看你的十六进制数是如何获得的,内部格式是什么,如果是用toString转的,可以参考下面的做法

一种可能性是分别解析数字,将字符串分成两部分,并在转换过程中将两个部分视为整数,然后将它们重新组合在一起。

function parseFloat(str, radix)
{
        var parts = str.split(".");
        if ( parts.length > 1 )
        {
                return parseInt(parts[0], radix) + parseInt(parts[1], radix) / Math.pow(radix, parts[1].length);
        }
        return parseInt(parts[0], radix);
}

var myno = 28.4382;
var convno = myno.toString(16);
var f = parseFloat(convno, 16);
alert(myno + " -> " + convno + " -> " + f );

如果是按IEEE 754标准以十六进制格式存储。该标准不使用任何点(纯十六进制字母不存在)。取而代之的是有3组预定义长度的位(1 + 8 + 23 =总共32位──双倍使用64位)。

参考以下函数来将这样的数字解析为float:

function hex2float(num) {
    var sign = (num & 0x80000000) ? -1 : 1;
    var exponent = ((num >> 23) & 0xff) - 127;
    var mantissa = 1 + ((num & 0x7fffff) / 0x7fffff);
    return sign * mantissa * Math.pow(2, exponent);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题