首先要看你的十六进制数是如何获得的,内部格式是什么,如果是用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); }
首先要看你的十六进制数是如何获得的,内部格式是什么,如果是用toString转的,可以参考下面的做法
一种可能性是分别解析数字,将字符串分成两部分,并在转换过程中将两个部分视为整数,然后将它们重新组合在一起。
如果是按IEEE 754标准以十六进制格式存储。该标准不使用任何点(纯十六进制字母不存在)。取而代之的是有3组预定义长度的位(1 + 8 + 23 =总共32位──双倍使用64位)。
参考以下函数来将这样的数字解析为float: