目录
三、带小数的十进制数 转换为—> 其他进制数 (不精确转换)
稍微懂点计算机的人都知道二进制、十进制、八进制、十六进制等等,但是他们之间的转换问题,却让人头痛。这里我来分类整理一下使用JavaScript如何在各个进制之间进行转换。
一、不带小数的十进制 转换为--> 其他进制
//十进制转二进制
new Number(22).toString(2); ----> 10110
//十进制转八进制
new Number(22).toString(8); ----> 26
//十进制转十六进制
new Number(22).toString(16); ----> 16
二、不带小数其他进制 转换为—> 十进制
//二进制转换为十进制
parseInt('10110',2) ---> 22
//八进制转换为十进制
parseInt('26',8) ---> 22
//十六进制转换为十进制
parseInt('16',16) ---> 22
三、带小数的十进制数 转换为—> 其他进制数 (不精确转换)
//十进制转二进制
new Number(22.22).toString(2); ----> "10110.001110000101000111101011100001010001111010111"
//十进制转八进制
new Number(22.22).toString(8); ----> "26.160507534121727"
//十进制转十六进制
new Number(22.22).toString(16); ----> "16.3851eb851eb8"
注意:为什么这个地方说是不精确转换?原因请自行百度
对于转换要求比较高的项目,慎用此方法!
四、带小数其他进制 转换为—> 十进制
这个暂时没找到简单的方法,不过咱动手写个函数不就得了,还是挺简单的
/**
* @param {number} jz 当前字符串的进制数
*/
String.prototype.toTen = function(jz){
var numstr = this
var arr = numstr.split('.');
var num = 0;
if(arr.length>1){
//整数部分
num += parseInt(numstr,jz);
// 计算权重
var qz = 1/jz;
//小数部分
for(var i=0;i<arr[1].length;i++){
num += qz*arr[1][i];
qz *= 1/jz;
};
return num;
}
}
几个示例:
'11.101'.toTen(2) // === 3.625
'11.101'.toTen(8) // === 9.126953125
'11.101'.toTen(16) // === 17.062744140625
总结
利用JavaScript来进行进制转换得到的结果可能是不精确的,缘由是因为JavaScript语言本身造成的,此处不展开讲解。
如果你做的项目对精度要求很高,建议不要通过JavaScript来转换!把这些转换方法当做界面显示的一个补充就行了!
觉得不错,还请点赞收藏!
励志前端,CSDN唯一账号!关注我,带你了解更多前端知识!