HTML 计算器 复制直接使用,解决了已知的BUG.

点击查看原文
在别人代码基础上修改的看源代码请点击上方链接

需求:制作web版计算器,要求实现±*%和平方,开方。

优化归零的问题
支持正负数;
修复多个多个运算符号导致不能计算的bug;
多个小数点的bug,
自然数e的问题,
0.1,0.2,0.04等小数在使用Math.pow(value, 几次幂) 函数开2次幂,3次幂时的问题
这个版本只能进行7位数以下的开方和次幂,18位数的结果显示

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>计算器</title>

    </head>

    <body>
        <div id="calculator">
            <div id="c_title"><h2>计算器</h2></div>
            <div id="c_text">
                <input type="text" id="text" value="0" readonly="readonly" />
            </div>
            <div id="c_value">
                <ul>
                    <li onclick="eq1(2)" class="c_blue"></li>
                    <li onclick="eq1(3)" class="c_blue"></li>
                    <li onclick="eq1(1/2)" class="c_blue">²√x</li>
                    <li onclick="eq1(1/3)" class="c_blue">³√x</li>
                    <li onclick="eq5()" class="c_blue">帮助</li>
                    <li onclick="get(7)">7</li>
                    <li onclick="get(8)">8</li>
                    <li onclick="get(9)">9</li>
                    <li onclick="goBack()" class="c_blue"></li>
                    <li onclick="clearText()" class="c_blue">C</li>
                    <li onclick="get(4)">4</li>
                    <li onclick="get(5)">5</li>
                    <li onclick="get(6)">6</li>
                    <li onclick="get('*')" class="c_blue">×</li>
                    <li onclick="get('/')" class="c_blue">÷</li>
                    <li onclick="get(1)">1</li>
                    <li onclick="get(2)">2</li>
                    <li onclick="get(3)">3</li>
                    <li onclick="get('+')" class="c_blue">+</li>
                    <li onclick="get('-')" class="c_blue">-</li>
                    <li onclick="get(0)">0</li>
                    <li onclick="get('00')">00</li>
                    <li onclick="get('.')">.</li>
                    <li onclick="get('%')" class="c_blue">%  </li>
                    <li onclick="eq()" class="c_yellow">=</li>
                </ul>
            </div>
        </div>
    </body>


        <script type="text/javascript">

            var IsClear = false;
            var cal = false;
            function get(key) {
                var str = document.getElementById("text").value;
                var rr = str.substr(str.length - 1, 1); //获取最后一位字符

                if (IsClear) {
                    str = "0";
                    IsClear = false;
                    cal = false;
                }

                if (str.length < 20) {
                    str = (str == "0" && key != "." ? "" : str);
                    if (str == "" && key == '00') {
                        str = "0";
                    } else {
                        if (isNaN(key)) {//不是数字类型 
                            //是不是小数点
                            if (key == ".") {

                                if (isNaN(rr)) {//也不是数字类型
                                    document.getElementById("text").value = str;
                                } else {
                                    if (cal) {
                                        document.getElementById("text").value = str;
                                    } else {
                                        str += key;
                                        document.getElementById("text").value = str;
                                    }
                                }
                                cal = true;
                            } else {
                                cal = false;
                                if (isNaN(rr)) {//也不是数字类型
                                    document.getElementById("text").value = str;
                                } else {
                                    str += key;
                                    document.getElementById("text").value = str;
                                }
                            }
                        } else {
                            str += key;
                            document.getElementById("text").value = str;
                        }
                    }
                }
            }


            function goBack(){
                var str = document.getElementById("text").value;
                var rr = str.substr(str.length - 1, 1); //获取最后一位字符
                if (rr == ".") { cal = false; }
                str = str.substring(0,str.length-1);
                if(str=="") str="0";
                document.getElementById("text").value = str;
            }

            function clearText(){
                document.getElementById("text").value = "0";
            }

            function eq1(zds){
	            var result; 
                // IsClear = true; //计算之后是否归零
                var str = document.getElementById("text").value;
                if (str.length < 7) {
                    var value = eval(str)
                    if (value >= 0) {
                        result = Math.pow(value, zds);
                    } else {
                        result = - Math.pow(-value, zds);
                    }

                    if (result == "Infinity") {
                        IsClear = true;
                        result = "输入有误";
                    } else if (result.toString().length > 10) {
                        result = getBit(result, 10);
                        result = eval(result);
                    }
                } else { IsClear = true; result = "数据太大结果超出";}
                document.getElementById("text").value = result;
            }

            function getBit(value, bit) {
                let str = value.toString();
                let strIndex = str.indexOf('.');
                if (strIndex === -1) return str;
                str = str.substring(0, strIndex + bit);
                console.log(str, bit);
                return str;
            }

            function eq5(){
	            IsClear = true;
	            result = "支持正负数,修复多个运算符号不能计算bug,如还有问题联系:17673130936(彭旭)";
                document.getElementById("text").value = result;
            }
	
            function eq(){
                // IsClear = true; //计算之后是否归零
                var str = document.getElementById("text").value;
                if (str.length < 18) {
	                // 如果第一位不是数字类型去掉第一位
	                var aa = str.substr(0,1);
                    if(isNaN(aa) && aa != "-"){ str = str.substring(1,str.length); }
	                // 如果最后一位不是数字类型去掉最后一位
	                var zz= str.substr(str.length-1,1);
                    if (isNaN(zz)){ str = str.substring(0,str.length-1); }

                    var result = eval(str)
                    if(result == "Infinity"){
	                    IsClear = true; 
                        result = "输入有误"; 
                    }
                } else { IsClear = true; result = "数据太大结果超出"; }
                document.getElementById("text").value = result;
            }

        </script>
            <style type="text/css">
            body{
                padding: 0;margin: 0;
                background-color:#49C593 ;
            }
            #calculator{
                position: absolute;
                width: 1200px;height: 620px;
                left: 50%;top: 50%;
                margin-left: -600px;
                margin-top: -310px;
            }
            #calculator #c_title {
                margin: auto;
                /*margin-left: 300px;*/
                width: 800px;
                height: 80px;
            }
            #calculator #c_title h2{
                text-align: center;
                font-size: 33px;font-family: "微软雅黑";color: #666;
                line-height: 30px;
            }
            #c_text{
                width: 1000px;
                margin: auto;
            }
            #calculator #c_text #text{
                /*margin-left: 200px;*/
                padding-right: 10px;
                width: 1000px;
                height: 50px;
                font-size: 25px;font-family: "微软雅黑";color: #666666;
                text-align: right;border: 1px white;
                border: double 1px;
            }
            #calculator #c_value{
                width: 1080px;height: 408px;
                /*margin-left: 160px;*/
                margin: 20px auto;
            }
            #calculator #c_value ul{
                margin: 0;
            }
            #calculator #c_value ul li{
                margin: 10px;
                list-style: none;float: left;
                width: 180px;height: 80px;line-height: 80px;
                text-align: center;background-color: chartreuse;
                border: 1px solid black;
                font-size: 30px;font-family: "微软雅黑";color: #666;
                box-shadow: 5px 5px 30px rgba(0,0,0,0.4);           
                -webkit-user-select: none;
                -ms-user-select: none;
                -moz-user-select: none;
            }
            #calculator #c_value ul li:active{
                background-color: white;
            }
            #calculator #c_value ul li:hover{
                opacity:0.8;
                cursor:pointer;
            }
            #calculator #c_value ul .c_blue{
                background-color: cornflowerblue;color: #000000;
            }
            #calculator #c_value ul .c_yellow{
                background-color: #f9f900;color: #000000;
            }
        </style>
</html>

版权声明:本文为qq_38762411原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。