This question让我问下面的问题 .
我想将基数为10的数字转换为基数为16的数字 .
var myno = 28.5;
var convno = myno.toString( 16 );
alert( convno );
一切都很好 . 现在我想将它转换回十进制 .
但现在我不能写
var orgno = parseInt( convno, 16 );
alert( orgno );
因为它不返回小数部分 .
并且不能使用parseFloat,因为根据MDC,parseFloat的语法是
parseFloat(str);
如果我必须转换回int,那将是一个问题,因为parseInt语法是
parseInt(str [, radix]);
那么有什么替代方案呢?
免责声明:我认为这是一个微不足道的问题,但谷歌搜索没有给我答案 .
6 回答
我不确定你想在那里解析什么十六进制格式,是这样的:“a1.2c”?
浮点数通常使用IEEE 754 standard以十六进制格式存储 . 该标准不存在于纯十六进制字母表中 . 取而代之的是有3组预定义长度的位(1 8 23 =总共32位──双倍使用64位) .
我编写了以下函数来将这样的数字解析为float:
试试这个 .
字符串可以是原始数据(简单文本),带有4个字符(0 - 255)或十六进制字符串“0xffffffff”4个字节长度
jsfiddle.net
Try this:
确定小数点后需要多少精度数位 .
将原始数字乘以16的幂(例如,如果需要两位数,则为256) .
将其转换为整数 .
根据您在步骤1中的决定手动设置小数点 .
反转要转换回的步骤 .
取出小数点,记住它的位置 .
以整数形式将十六进制转换为十进制 .
将结果除以16的适当幂(16 ^ n,其中n是您在步骤1中取出的小数点后的位数) .
A simple example:
将十进制23.5转换为十六进制,并希望转换后的小数点后一位数 .
23.5 x 16 = 376 .
转换为十六进制= 0x178 .
答案基数16:17.8
现在转换回十进制:
取小数点:0x178
转换为十进制:376
除以16:23.5
另一种可能性是分别解析数字,将字符串分成两部分,并在转换过程中将两个部分视为整数,然后将它们重新组合在一起 .
请试试这个:
我结合Mark和Kent的答案来制作一个重载的parseFloat函数,该函数接受基数的参数(更简单,更通用):
我希望这可以帮助别人!