鱼C论坛

 找回密码
 立即注册
查看: 2454|回复: 3

[已解决]简易计算器

[复制链接]
发表于 2020-11-3 22:32:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

如何让计算器中等式和结果一起显示而不是结果代替等式,求助,谢谢。








<!DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <title>计算器</title>
        <link rel="stylesheet" type="text/css" href="main.css">
</head>
<body>
   <div class="box-1">
                <div class="box-2">
                    <input type="text" name="" class="bag" id="input-box" value="0" maxlength="21" readonly="readonly">
                    <div class="bag-2">
                            <div onclick="a('1')" class="little-box">1</div>
                            <div onclick="a('2')" class="little-box">2</div>
                            <div onclick="a('3')" class="little-box">3</div>
                            <div onclick="operator('backspace')" class="little-box">←</div>
                            <div onclick="a('+')" class="little-box">+</div>
               </div>
                    <div class="bag-2">
                            <div onclick="a('4')" class="little-box">4</div>
                            <div onclick="a('5')" class="little-box">5</div>
                            <div onclick="a('6')" class="little-box">6</div>
                            <div onclick="operator('pow')" class="little-box">x2</div>
                            <div onclick="a('-')" class="little-box">-</div>
                    </div>
                    <div class="bag-2">
                            <div onclick="a('7')" class="little-box">7</div>
                            <div onclick="a('8')" class="little-box">8</div>
                            <div onclick="a('9')" class="little-box">9</div>
                            <div onclick="operator('opposite')" class="little-box">+/-</div>
                            <div onclick="a('*')" class="little-box">*</div>
                    </div>
                    <div class="bag-2">
                            <div onclick="a('.')" class="little-box">.</div>
                            <div onclick="a('0')" class="little-box">0</div>
                            <div onclick="e()" class="little-box">=</div>
                            <div onclick="operator('sqrt')"  class="little-box">√</div>
                            <div onclick="a('/')" class="little-box">/</div>
                    </div>
                  
            </div>
   </div>
   <script>
                        input = document.getElementById('input-box');

                        function s(v) {
                                input.value = v
                        }

                        function a(v) {
                                input.value += v
                        }

                        function e() {
                               
                                try {
                                        s(eval(input.value))
                                } catch (e) {
                                        s('Error')
                                }
                        }


                        function operator(type) {
                                switch (type) {
                                        case "backspace":
                                                var str = input.value;
                                                //str = (str != "0") ? str : "";
                                                str = str.substr(0, str.length - 1);
                                                str = (str != "") ? str : "0";
                                                input.value = str;
                                                break;
                                        case "opposite":
                                                input.value = -input.value;
                                                break;
                                        case "percent":
                                                input.value = input.value / 100;
                                                break;
                                        case "pow":
                                                input.value = Math.pow(input.value, 2);
                                                break;
                                        case "sqrt":
                                                input.value = Math.sqrt(input.value);
                                                break;
                                }
                        }
                </script>
</body>
</html>




以下是css代码
* {
    margin: 0;
    padding: 0;
   
}
.box-1{
        width: 901px;
        height: 647px;
        background-color: #000;
        z-index: 2;
        margin-left: 333px;
        margin-top: 20px;

}
.box-2{
        width: 649px;
        height: 566px;
        background-color: #ffff;
        padding-left: 86px;
        padding-top: 41px;
  margin: 80px;
}
.bag{
        height: 80px;
        width: 569px;
        background-color: #eeeeeb;
        padding-top: 20px;
        padding-left: 20px;
}
.bag-2{
        height: 98px;
        width: 569px;
        margin: 10px;
        background-color: #ffff;
       
}
.little-box{
        margin: 10px;
        float: left;
        width: 83px;
        height: 85px;
        padding-left: 10px;
        background-color: #eeeeeb;
        text-align: center;
        font-size: 14px;

}





最佳答案
2020-11-4 08:49:56
多行屏幕显示 一行显示算式 一行显示结果 每次按【=】就复制
贴一个我以前写的
  1. <style>
  2.     * {
  3.         margin: 0;
  4.         padding: 0;
  5.         text-decoration: none;
  6.         list-style: none;
  7.     }

  8.     body {
  9.         background-color: #eee;
  10.     }

  11.     .frame {
  12.         width: 500px;
  13.         height: 600px;
  14.         margin: 50px auto;
  15.         background-color: #ccc;
  16.         box-shadow: 0 0 10px #000;
  17.         padding: 4px;
  18.         border-radius: 6px;
  19.     }

  20.     .numberOutput {
  21.         width: 498px;
  22.         background-color: #eee;
  23.     }

  24.     .numberOutput p {
  25.         display: flex;
  26.         flex-direction: row-reverse;
  27.         font-size: 48px;
  28.         overflow-y: hidden;
  29.         height: 75px;
  30.     }

  31.     .numberInput {
  32.         float: left;
  33.         width: 500px;
  34.         height: 360px;
  35.         background-color: #fff;
  36.     }

  37.     .numberInput li {
  38.         float: left;
  39.         width: 121px;
  40.         line-height: 86px;
  41.         text-align: center;
  42.         font-size: 35px;
  43.         background-color: #aaa;
  44.         border: 2px solid #ccc;
  45.         cursor: pointer;
  46.     }

  47.     .numberInput li:hover {
  48.         background-color: #ccc;
  49.     }
  50. </style>
  51. <script>
  52.     window.onload = function () {
  53.         let num = document.getElementsByClassName("num")
  54.         let btn = document.getElementsByClassName("btn")
  55.         let vw = document.getElementsByClassName("output")[1]
  56.         let vwH = document.getElementsByClassName("output")[0]
  57.         for (let i = 0; i < num.length; i++) {
  58.             num[i].onclick = function () {
  59.                 vw.innerHTML += num[i].innerHTML
  60.             }
  61.         }
  62.         btn[0].onclick = function () {
  63.             vw.innerHTML = vw.innerHTML.substr(0, vw.innerHTML.length - 1)
  64.         }
  65.         btn[1].onclick = function () {
  66.             location.reload();     //刷新页面
  67.         }
  68.         btn[2].onclick = function () {
  69.             if (vw.innerHTML.indexOf('%') !== -1) {   //这个百分数结果并不能在下次运算中使用 除非退格删掉
  70.                 vw.innerHTML = 'error'
  71.             } else if (vw.innerHTML.indexOf('e') !== -1) {  //error没删干净 强制刷新
  72.                 location.reload();
  73.             } else {
  74.                 vwH.innerHTML = vw.innerHTML + '×100%'
  75.                 vw.innerHTML = Number(vw.innerHTML) * 100 + '%'
  76.             }
  77.         }
  78.         btn[3].onclick = function () {
  79.             if (vw.innerHTML.indexOf('%') !== -1) {   //这个百分数结果并不能在下次运算中使用 除非退格删掉
  80.                 vw.innerHTML = 'error'
  81.             } else if (vw.innerHTML.indexOf('e') !== -1) {  //error没删干净 强制刷新
  82.                 location.reload();
  83.             } else {
  84.                 vwH.innerHTML = 'sqrt(' + vw.innerHTML + ')'
  85.                 vw.innerHTML = Number(vw.innerHTML) ** 0.5
  86.             }
  87.         }
  88.         function floatBase(numA, numB) {        //浮点数运算问题
  89.             let aLastIndex = String(numA).length - 1
  90.             let bLastIndex = String(numB).length - 1
  91.             let aFloLen = aLastIndex - (Number.isInteger(numA * 1) ? aLastIndex : String(numA).indexOf('.'))
  92.             let bFloLen = bLastIndex - (Number.isInteger(numB * 1) ? bLastIndex : String(numB).indexOf('.'))
  93.             return 10 ** (aFloLen > bFloLen ? aFloLen : bFloLen)
  94.         }
  95.         function computed(numA, numB, sym, base) {   //定义中文及自定义运算符号
  96.             switch (sym) {
  97.                 case '+':
  98.                     return (numA * base + numB * base) / base
  99.                     break;
  100.                 case '-':
  101.                     return (numA * base - numB * base) / base
  102.                     break;
  103.                 case '×':
  104.                     return (numA * base * (numB * base)) / base ** 2
  105.                     break;
  106.                 case '÷':
  107.                     return numA * base / (numB * base)
  108.                     break;
  109.                 //default:
  110.             }
  111.         }
  112.         function evaluation(arr, s = 0, e = arr.length) {
  113.             let arr2 = arr.slice(s, e)
  114.             let symArr1 = arr2.filter(z => (z === '×' || z === '÷'))  //回调函数filter()  定义运算优先级
  115.             let symArr2 = arr2.filter(z => (z === '+' || z === '-'))
  116.             while (1) {
  117.                 let idx, base, sym, res;
  118.                 let first = symArr1.shift() || symArr2.shift()
  119.                 if (!first) { break }
  120.                 idx = arr2.indexOf(first)
  121.                 sym = first
  122.                 base = floatBase(arr2[idx - 1], arr2[idx + 1])
  123.                 res = computed(arr2[idx - 1], arr2[idx + 1], sym, base)
  124.                 arr2.splice(idx - 1, 3, res)
  125.             }
  126.             return arr2.shift()
  127.         }
  128.         btn[18].onclick = function () {
  129.             vwH.innerHTML = vw.innerHTML
  130.             if (vw.innerHTML.indexOf('%') !== -1) {   //这个百分数结果并不能在下次运算中使用 除非退格删掉
  131.                 vw.innerHTML = 'error'
  132.             } else if (vw.innerHTML.indexOf('I') !== -1) {  //Infinity没删干净 强制刷新
  133.                 location.reload();
  134.             } else if (vw.innerHTML.indexOf('e') !== -1) {  //error没删干净 强制刷新
  135.                 location.reload();
  136.             } else if (vw.innerHTML.indexOf('N') !== -1) {  //NaN没删干净 强制刷新
  137.                 location.reload();
  138.             } else {
  139.                 vw.innerHTML = vw.innerHTML.replace(/\+/g, ',+,').replace(/\-/g, ',-,').replace(/\×/g, ',×,').replace(/\÷/g, ',÷,');
  140.                 vw.innerHTML = evaluation(vw.innerHTML.split(','))
  141.             }
  142.         }
  143.     }
  144. </script>
  145. <div class="frame">
  146.     <div class="numberOutput">
  147.         <p class="output"></p>
  148.         <p class="output"></p>
  149.     </div>
  150.     <!--禁止文本被拖拽或双击选中-->
  151.     <div class="numberInput" onselectstart="return false;" ondragstart="return false">
  152.         <ul>
  153.             <li class="btn">←</li>
  154.             <li class="btn">C</li>
  155.             <li class="btn">%</li>
  156.             <li class="btn">√</li>
  157.             <li class="num btn">7</li>
  158.             <li class="num btn">8</li>
  159.             <li class="num btn">9</li>
  160.             <li class="num btn">÷</li>
  161.             <li class="num btn">4</li>
  162.             <li class="num btn">5</li>
  163.             <li class="num btn">6</li>
  164.             <li class="num btn">×</li>
  165.             <li class="num btn">1</li>
  166.             <li class="num btn">2</li>
  167.             <li class="num btn">3</li>
  168.             <li class="num btn">-</li>
  169.             <li class="num btn">0</li>
  170.             <li class="num btn">.</li>
  171.             <li class="btn">=</li>
  172.             <li class="num btn">+</li>
  173.         </ul>
  174.     </div>
  175. </div>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-4 08:49:56 | 显示全部楼层    本楼为最佳答案   
多行屏幕显示 一行显示算式 一行显示结果 每次按【=】就复制
贴一个我以前写的
  1. <style>
  2.     * {
  3.         margin: 0;
  4.         padding: 0;
  5.         text-decoration: none;
  6.         list-style: none;
  7.     }

  8.     body {
  9.         background-color: #eee;
  10.     }

  11.     .frame {
  12.         width: 500px;
  13.         height: 600px;
  14.         margin: 50px auto;
  15.         background-color: #ccc;
  16.         box-shadow: 0 0 10px #000;
  17.         padding: 4px;
  18.         border-radius: 6px;
  19.     }

  20.     .numberOutput {
  21.         width: 498px;
  22.         background-color: #eee;
  23.     }

  24.     .numberOutput p {
  25.         display: flex;
  26.         flex-direction: row-reverse;
  27.         font-size: 48px;
  28.         overflow-y: hidden;
  29.         height: 75px;
  30.     }

  31.     .numberInput {
  32.         float: left;
  33.         width: 500px;
  34.         height: 360px;
  35.         background-color: #fff;
  36.     }

  37.     .numberInput li {
  38.         float: left;
  39.         width: 121px;
  40.         line-height: 86px;
  41.         text-align: center;
  42.         font-size: 35px;
  43.         background-color: #aaa;
  44.         border: 2px solid #ccc;
  45.         cursor: pointer;
  46.     }

  47.     .numberInput li:hover {
  48.         background-color: #ccc;
  49.     }
  50. </style>
  51. <script>
  52.     window.onload = function () {
  53.         let num = document.getElementsByClassName("num")
  54.         let btn = document.getElementsByClassName("btn")
  55.         let vw = document.getElementsByClassName("output")[1]
  56.         let vwH = document.getElementsByClassName("output")[0]
  57.         for (let i = 0; i < num.length; i++) {
  58.             num[i].onclick = function () {
  59.                 vw.innerHTML += num[i].innerHTML
  60.             }
  61.         }
  62.         btn[0].onclick = function () {
  63.             vw.innerHTML = vw.innerHTML.substr(0, vw.innerHTML.length - 1)
  64.         }
  65.         btn[1].onclick = function () {
  66.             location.reload();     //刷新页面
  67.         }
  68.         btn[2].onclick = function () {
  69.             if (vw.innerHTML.indexOf('%') !== -1) {   //这个百分数结果并不能在下次运算中使用 除非退格删掉
  70.                 vw.innerHTML = 'error'
  71.             } else if (vw.innerHTML.indexOf('e') !== -1) {  //error没删干净 强制刷新
  72.                 location.reload();
  73.             } else {
  74.                 vwH.innerHTML = vw.innerHTML + '×100%'
  75.                 vw.innerHTML = Number(vw.innerHTML) * 100 + '%'
  76.             }
  77.         }
  78.         btn[3].onclick = function () {
  79.             if (vw.innerHTML.indexOf('%') !== -1) {   //这个百分数结果并不能在下次运算中使用 除非退格删掉
  80.                 vw.innerHTML = 'error'
  81.             } else if (vw.innerHTML.indexOf('e') !== -1) {  //error没删干净 强制刷新
  82.                 location.reload();
  83.             } else {
  84.                 vwH.innerHTML = 'sqrt(' + vw.innerHTML + ')'
  85.                 vw.innerHTML = Number(vw.innerHTML) ** 0.5
  86.             }
  87.         }
  88.         function floatBase(numA, numB) {        //浮点数运算问题
  89.             let aLastIndex = String(numA).length - 1
  90.             let bLastIndex = String(numB).length - 1
  91.             let aFloLen = aLastIndex - (Number.isInteger(numA * 1) ? aLastIndex : String(numA).indexOf('.'))
  92.             let bFloLen = bLastIndex - (Number.isInteger(numB * 1) ? bLastIndex : String(numB).indexOf('.'))
  93.             return 10 ** (aFloLen > bFloLen ? aFloLen : bFloLen)
  94.         }
  95.         function computed(numA, numB, sym, base) {   //定义中文及自定义运算符号
  96.             switch (sym) {
  97.                 case '+':
  98.                     return (numA * base + numB * base) / base
  99.                     break;
  100.                 case '-':
  101.                     return (numA * base - numB * base) / base
  102.                     break;
  103.                 case '×':
  104.                     return (numA * base * (numB * base)) / base ** 2
  105.                     break;
  106.                 case '÷':
  107.                     return numA * base / (numB * base)
  108.                     break;
  109.                 //default:
  110.             }
  111.         }
  112.         function evaluation(arr, s = 0, e = arr.length) {
  113.             let arr2 = arr.slice(s, e)
  114.             let symArr1 = arr2.filter(z => (z === '×' || z === '÷'))  //回调函数filter()  定义运算优先级
  115.             let symArr2 = arr2.filter(z => (z === '+' || z === '-'))
  116.             while (1) {
  117.                 let idx, base, sym, res;
  118.                 let first = symArr1.shift() || symArr2.shift()
  119.                 if (!first) { break }
  120.                 idx = arr2.indexOf(first)
  121.                 sym = first
  122.                 base = floatBase(arr2[idx - 1], arr2[idx + 1])
  123.                 res = computed(arr2[idx - 1], arr2[idx + 1], sym, base)
  124.                 arr2.splice(idx - 1, 3, res)
  125.             }
  126.             return arr2.shift()
  127.         }
  128.         btn[18].onclick = function () {
  129.             vwH.innerHTML = vw.innerHTML
  130.             if (vw.innerHTML.indexOf('%') !== -1) {   //这个百分数结果并不能在下次运算中使用 除非退格删掉
  131.                 vw.innerHTML = 'error'
  132.             } else if (vw.innerHTML.indexOf('I') !== -1) {  //Infinity没删干净 强制刷新
  133.                 location.reload();
  134.             } else if (vw.innerHTML.indexOf('e') !== -1) {  //error没删干净 强制刷新
  135.                 location.reload();
  136.             } else if (vw.innerHTML.indexOf('N') !== -1) {  //NaN没删干净 强制刷新
  137.                 location.reload();
  138.             } else {
  139.                 vw.innerHTML = vw.innerHTML.replace(/\+/g, ',+,').replace(/\-/g, ',-,').replace(/\×/g, ',×,').replace(/\÷/g, ',÷,');
  140.                 vw.innerHTML = evaluation(vw.innerHTML.split(','))
  141.             }
  142.         }
  143.     }
  144. </script>
  145. <div class="frame">
  146.     <div class="numberOutput">
  147.         <p class="output"></p>
  148.         <p class="output"></p>
  149.     </div>
  150.     <!--禁止文本被拖拽或双击选中-->
  151.     <div class="numberInput" onselectstart="return false;" ondragstart="return false">
  152.         <ul>
  153.             <li class="btn">←</li>
  154.             <li class="btn">C</li>
  155.             <li class="btn">%</li>
  156.             <li class="btn">√</li>
  157.             <li class="num btn">7</li>
  158.             <li class="num btn">8</li>
  159.             <li class="num btn">9</li>
  160.             <li class="num btn">÷</li>
  161.             <li class="num btn">4</li>
  162.             <li class="num btn">5</li>
  163.             <li class="num btn">6</li>
  164.             <li class="num btn">×</li>
  165.             <li class="num btn">1</li>
  166.             <li class="num btn">2</li>
  167.             <li class="num btn">3</li>
  168.             <li class="num btn">-</li>
  169.             <li class="num btn">0</li>
  170.             <li class="num btn">.</li>
  171.             <li class="btn">=</li>
  172.             <li class="num btn">+</li>
  173.         </ul>
  174.     </div>
  175. </div>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-9 23:14:29 | 显示全部楼层
kogawananari 发表于 2020-11-4 08:49
多行屏幕显示 一行显示算式 一行显示结果 每次按【=】就复制
贴一个我以前写的

我想问一下从119到132行是什么意思,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-10 09:37:22 | 显示全部楼层
真的只会一点点 发表于 2020-11-9 23:14
我想问一下从119到132行是什么意思,谢谢

先算乘除 再算加减
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-19 21:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表