JavaScript 进制相互转换器

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>

效果图:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44567289/article/details/89000799