JavaScript 进制相互转换器
主要功能:2、4、8、10、16相互转换
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>ceshi6</title>
</head>
<body>
<div>
<input name="zhi1" type="radio" value="2" />2
<input name="zhi1" type="radio" value="4" />4
<input name="zhi1" type="radio" value="8" />8
<input name="zhi1" type="radio" value="10" />10
<input name="zhi1" type="radio" value="16" />16
</div>
<div>
<span>输入转换的值</span>
<input id="zhi3" type="text" />
</div>
<div>
<input name="zhi2" type="radio" value="2" />2
<input name="zhi2" type="radio" value="4" />4
<input name="zhi2" type="radio" value="8" />8
<input name="zhi2" type="radio" value="10" />10
<input name="zhi2" type="radio" value="16" />16
</div>
<div>
<span>转换后的结果</span>
<input id="zhi4" type="text" />
</div>
<button "ww()">按钮</button>
<script>
var open = false;//设置开关
function ww() {
var zhi1 = document.getElementsByName("zhi1");
for (var i = 0; i < zhi1.length; i++) {//获取选中radio1
if (zhi1[i].checked == true) {
var q1 = zhi1[i].value;
}
}
var zhi2 = document.getElementsByName("zhi2");//获取选中radio2
for (var i = 0; i < zhi2.length; i++) {
if (zhi2[i].checked == true) {
var q2 = zhi2[i].value;
}
}
var zhi3 = document.getElementById("zhi3");
var zhi4 = document.getElementById("zhi4");
zhi4.value = '';//清空结果
if (q1 == q2) {//如果转换一样就值相等
zhi4.value = zhi3.value;
}
if (q1 != undefined && q2 != undefined) {//判断是否选中radio
var zhi3 = document.getElementById("zhi3").value;//获取转换值
if (q1 < 10) {//判断转换进制是否是10进制以下
if (zhi3.indexOf(q1) > -1) {//因为10进制一下有限制:如2进制位数不能大于一
alert("超出进制限定范围");
} else {
open = true;//开
}
} else {
open = true;
}
if (open == true) {
open = false;//关,避免重复操作
if (zhi3 != "") {
var sss = parseInt(zhi3, q1);//把输入值先转为10进制
if (q2 == 2) {
two(sss);//转2进制
} else if (q2 == 8) {
eight(sss);//转8进制
} else if (q2 == 16) {
sixteen(sss);//转16进制
} else if (q2 == 10) {//转10进制
zhi4.value = sss;
} else if (q2 == 4) {//转4进制
four(sss);
}
} else {
alert("请输入需要换算的值")
}
}
} else {
alert("请选择换算的进制")
}
}
//四进制
function four(sss) {
var zhi4 = document.getElementById('zhi4');
var z2 = Number(sss);
var shu = [];
suan();
function suan() {
for (var i = 0; i <= z2; i++) {
if (4 * i > z2) {
var q = i - 1;
var yu = z2 % 4;
z2 = q;
shu.push(yu);
if (q > 0) {
suan()
}
}
if (q == 0) {
break;
}
}
}
var x = '';
for (var i = shu.length; i > 0; i--) {
x += shu[i - 1];
}
zhi4.value = x;
}
//十六进制
function sixteen(sss) {
var zhi4 = document.getElementById('zhi4');
var z2 = Number(sss);//设置一个值,用以计算
var shu = [];
suan();
function suan() {
for (var i = 0; i <= z2; i++) {
if (16 * i > z2) {//先获取大于转换值的倍数
var q = i - 1;//倍数减一,因为不能大于转换值
var yu = z2 % 16;//取余,直到商为零
z2 = q;
if (yu == 10) {//十六进制10~15为字母
yu = 'a';
} else if (yu == 11) {
yu = 'b';
} else if (yu == 12) {
yu = 'c';
} else if (yu == 13) {
yu = 'd';
} else if (yu == 14) {
yu = 'e';
} else if (yu == 15) {
yu = 'f';
}
shu.push(yu);//把余数放入数组,等会有用
if (q > 0) {
suan()//递归
}
}
if (q == 0) {
break;//跳出循环
}
}
}
var x = '';
for (var i = shu.length; i > 0; i--) {
x += shu[i - 1];//余数倒着输出就是结果集
}
zhi4.value = x;//显示结果集
}
//八进制
function eight(sss) {//跟16进制相似,不一一说明
var zhi4 = document.getElementById('zhi4');
var z2 = Number(sss);
var shu = [];
suan();
function suan() {
for (var i = 0; i <= z2; i++) {
if (8 * i > z2) {
var q = i - 1;
var yu = z2 % 8;
z2 = q;
shu.push(yu);
if (q > 0) {
suan()
}
}
if (q == 0) {
break;
}
}
}
console.log(shu);
var x = '';
for (var i = shu.length; i > 0; i--) {
x += shu[i - 1];
}
zhi4.value = x;
}
//二进制
function two(sss) {
var zhi4 = document.getElementById('zhi4');
var ci = parseInt(sss / 2);
var z2 = Number(sss);
var shu = [];
suan();
function suan() {
for (var i = 0; i < ci; i++) {
if (Math.pow(2, i) > z2) {//循环2的倍数,直到比转换值大
var s = i - 1;//倍数减一
shu.push(s);//倍数结果放入数组,一会有用到
z2 = z2 - Math.pow(2, s);//更新转换值,求差值
if (z2 > 0) {
suan()//递归
}
}
if (z2 == 0) {
break;//等转换值为0时,跳出循环
}
}
}
var ejz = '';
for (var i = shu[0]; i > -1 ; i--) {
if (shu.includes(i)) {//判断数组里是否有该值,有就输出1,没有就输出0
ejz += '1';//有值说明能整除,再判断是多少位的
} else {//数学不好,解析不清楚,所以多输出看看就知道了,
ejz += '0';//2进制头疼了好久才想出来的
}
}
var bu = '';
var q = ejz.length % 4;
for (var i = 0; i < 4; i++) {//补数,美观
if ((q + i) % 4 == 0) {
for (var j = 0; j < i; j++) {//差多少补多少
bu += '0';
}
}
}
zhi4.value = bu + ejz;//显示结果集
}
</script>
</body>
</html>
效果图: