html实现计算器

在这里插入图片描述
html实现计算器

<!-- 开始时间:2023.03.20
     创作者:翟梦坤
     内容:html计算机的实现
 -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>computer</title>
    <script type="text/javascript">
        //把字符串存入数组
        var nums = new Array();
        //需要相加的数存入的数组
        var addNums = new Array();
        //需要相减的数存入的数组
        var delNums = new Array();
        //记录加数数组的下标
        var addFlag = 0;
        //记录减数数组的下标
        var delFlag = 0;
        //nums数组的下标
        var flag = 0;
        //记录最终结果
        var finalResult = 0;

        //  数字与运算符输入处理函数
        function input(number) {
            nums[flag] = number;//把输入栏字符串存入nums数组
            flag++;//下标同步加1
            var result = document.getElementById("result1");//获取标签
            result.innerHTML = result.innerHTML + number;//把新输入的值拼接在之前输入栏的位置

            //处理多位数
            // var i = 1;           
            // if (nums[flag-1] == '+' || nums[flag-1] == '-' || nums[flag-1] == '*' || nums[flag-1] == '/') {
            //     for(i;i<flag;i++){
            //         if(!isNaN(Number(nums[flag-i]))){//判断是否为数字
            //             var temp  = '';
            //             var temp1 = '';
            //             temp=temp+nums[flag-i-1];
            //             for(var i=0;i<temp.length;i++){
            //                 temp1[temp.length-i-1] = temp[i]; 
            //             }
            //             flag=flag-i-1;
            //             nums[flag]=Number(temp1);
            //         }else{
            //             return;
            //         }
            //     }
            // }
        }

        //计算结果函数
        function res() {
            var result = document.getElementById("result1");//获取输入栏标签
            var result1 = document.getElementById("result2");//获取输出栏标签
            var res = 0;//结果保存
            //var opers = '';
            //var nums = '';
            //var expression = result.innerHTML;
            //result1.innerHTML = eval(expression);

            //使用栈的思想完成
            // for (var i = 0; i < expression.length; i++) {
            //     console.log(expression[i]);
            //     if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/') {
            //         opers = opers + expression[i];
            //     }else{
            //         nums = nums + expression[i];
            //     }
            // }            // for (var i = 0; i < opers.length; i++) {
            //     console.log(opers[i]);
            // }
            // for (var i = 0; i < nums.length; i++) {
            //     console.log(nums[i]);
            // }

            //遍历nums数组对数据以此进行判断处理,根据前后符号进行判断
            for (var i = 0; i < nums.length; i++) {
                if (nums[i] == '*') {//除法处理
                    if (nums[i - 2] == '+') {//乘号前为加号情况,把值存入加数数组
                        addNums[addFlag] = nums[i - 1] * nums[i + 1];
                        addFlag++;
                    } else if (nums[i - 2] == '-') {//乘号前为减号情况,把值存入减数数组
                        delNums[delFlag] = nums[i - 1] * nums[i + 1];
                        delFlag++;
                    } else if (nums[i - 2] == '*') {//连乘处理
                        addNums[addFlag - 1] = addNums[addFlag - 1] * nums[i + 1];
                    }
                    else {//前方无符号情况
                        addNums[addFlag] = nums[i - 1] * nums[i + 1];
                        addFlag++;
                    }
                } else if (nums[i] == '/') {//除法处理
                    if (nums[i - 2] == '+') {//除号前为加号情况,把值存入加数数组
                        addNums[addFlag] = nums[i - 1] / nums[i + 1];
                        addFlag++;
                    } else if (nums[i - 2] == '-') {//除号前为减号处理,把值存入减数数组
                        delNums[delFlag] = nums[i - 1] / nums[i + 1];
                        delFlag++;
                    } else if (nums[i - 2] == '/') {//连除情况处理
                        addNums[addFlag - 1] = addNums[addFlag - 1] / nums[i + 1];
                    } else {//前方无符号情况
                        addNums[addFlag] = nums[i - 1] / nums[i + 1];
                        addFlag++;
                    }
                } else if (nums[i] == '+') {//加法处理
                    if (i + 2 == nums.length) {//只有两个数的情况,分别存入对应数组
                        addNums[addFlag] = nums[i - 1];
                        addFlag++;
                        addNums[addFlag] = nums[i + 1];
                        addFlag++;
                    } else if ((nums[i + 2] == '*' || nums[i + 2] == '/') && (nums[i - 2] == '*' || nums[i - 2] == '/')) {//乘法+乘法情况,不做处理让乘号部分自己处理

                    } else {//前方无符号情况
                        addNums[addFlag] = nums[i - 1];
                        addFlag++;
                    }
                } else if (nums[i] == '-') {//减法处理
                    if ((nums[i + 2] == '*' || nums[i + 2] == '/') && (nums[i - 2] == '*' || nums[i - 2] == '/')) {

                    } else if (nums[i - 2] == '-' || nums[i - 2] == '*' || nums[i - 2] == '/') {//前方有-,*,/符号情况,后方数字放入减数数组
                        delNums[delFlag] = nums[i + 1];
                        delFlag++;
                    } else if (nums[i + 2] == '*' || nums[i + 2] == '/') {//后方符合为*,/情况,前方数字放入加法数组
                        addNums[addFlag] = nums[i - 1];
                        addFlag++;
                    } else if (nums[i + 2] == '+') {//后方符号为+情况,分别放入对应数组
                        delNums[delFlag] = nums[i + 1];
                        delFlag++;
                        addNums[addFlag] = nums[i - 1];
                        addFlag++;
                    } else if (nums[i - 1] == '+') {//负值情况,放入减数数组
                        delNums[delFlag] = nums[i + 1];
                        delFlag++;
                    } else {//前方无符号情况
                        addNums[addFlag] = nums[i - 1];
                        addFlag++;
                        delNums[delFlag] = nums[i + 1];
                        delFlag++;
                    }
                } else if (nums[i] == '%') {//整除情况
                    addNums[addFlag] = nums[i - 1] % nums[i + 1];
                    addFlag++;
                }
            }
            //遍历把加数数组中的数据相加
            for (var i = 0; i < addNums.length; i++) {
                finalResult = finalResult + addNums[i];
            }
            //遍历把减数数组中的数据减去
            for (var i = 0; i < delNums.length; i++) {
                finalResult = finalResult - delNums[i];
            }
            //将结果显示
            if (finalResult % 1 != 0) {
                result1.innerHTML = finalResult.toFixed(8);
            } else {
                result1.innerHTML = finalResult;
            }
            //将所有数据恢复成初始状态
            nums = new Array();
            addNums = new Array();
            delNums = new Array();
            addFlag = 0;
            delFlag = 0;
            flag = 0;
            finalResult = 0;
        }

        //删除一位处理函数
        function del() {
            var result = document.getElementById("result1");//获取标签
            var len = result.innerHTML.length;//获取输入栏输入的长度
            result.innerHTML = result.innerHTML.substr(0, len - 1);//使用substr截取掉一位再保存
            flag--;//对nums数组下标同步减一
        }

        // 清除全部内容
        function clear1() {
            var result = document.getElementById("result1");//获取标签
            result.innerHTML = "";//输入显示栏设置为空值
            var result1 = document.getElementById("result2");//获取标签
            result1.innerHTML = "";//输出显示栏设置为空值
        }

    </script>
</head>

<body>

    <!-- 顶部样式 -->
    <div id="top">
        <div id="calc-title">计算器</div>
    </div>

    <!-- 结果输出栏样式 -->
    <div id="result" name="result">
        <div id="result1"></div>
        <div id="result2"></div>
    </div>
    <!-- 按钮输入组件 -->
    <div id="button">
        <div onclick="clear1()">AC</div>
        <div onclick="input('-')">+/-</div>
        <div onclick="input('%')">%</div>
        <div onclick="input('/')">÷</div>
        <div onclick="input(7)">7</div>
        <div onclick="input(8)">8</div>
        <div onclick="input(9)">9</div>
        <div onclick="input('*')">*</div>
        <div onclick="input(4)">4</div>
        <div onclick="input(5)">5</div>
        <div onclick="input(6)">6</div>
        <div onclick="input('-')">-</div>
        <div onclick="input(1)">1</div>
        <div onclick="input(2)">2</div>
        <div onclick="input(3)">3</div>
        <div onclick="input('+')">+</div>
        <div onclick="input(0)">0</div>
        <div onclick="del()">del</div>
        <div onclick="input('.')">.</div>
        <div onclick="res()">=</div>
    </div>
</body>

<style>
    /* 设置顶部标题栏样式 */
    #top {
        width: 446px;
        height: 50px;
        margin: auto;
        background-color: #8b918f;
        border: solid 2px rgb(7, 7, 7);
        /* border-radius: 10px; */
        /* border-top-left-radius: 10px; */
    }

    /* 标题栏字体样式 */
    #calc-title {
        font-size: 22px;
        color: white;
        float: right;
        margin-top: 10px;
        margin-right: 10px;
    }

    /* 设置结果显示栏样式 */
    #result {
        width: 446px;
        height: 100px;
        margin: auto;
        text-align: right;
        background-color: white;
        border: solid 2px rgb(7, 7, 7);
        font-size: 30px;
    }

    /* 设置输入行样式 */
    #result1 {
        font-size: 30px;
        text-align: right;
    }

    /* 设置输出行样式 */
    #result2 {
        font-size: 30px;
        text-align: right;
    }

    /* 设置按钮区域的样式 */
    #button {
        width: 450px;
        height: 422px;
        background-color: rgb(3, 3, 3);
        margin: auto;
    }

    /* 设置按钮的样式 */
    #button div {
        width: 108px;
        height: 80px;
        float: left;
        background-color: #ced8d5;
        margin: 2px;
        line-height: 80px;
        text-align: center;
        font-size: 26px;
    }


    /* 使用伪类选择器设置鼠标悬停效果 */
    #button div:hover {
        background-color: rgb(100, 235, 235);
    }
</style>

</html>

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

2014-01-07 2014-01-09 2014-01-11 2014-01-13 2014-01-15 2014-01-17 2014-01-19 2014-01-21 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的HTMLJavaScript实现计算器的示例: ```html <!DOCTYPE html> <html> <head> <title>计算器</title> </head> <body> <input type="text" id="input" disabled><br> <button onclick="clearInput()">清空</button> <button onclick="backspace()">退格</button><br> <button onclick="appendToInput('7')">7</button> <button onclick="appendToInput('8')">8</button> <button onclick="appendToInput('9')">9</button> <button onclick="appendToInput('/')">÷</button><br> <button onclick="appendToInput('4')">4</button> <button onclick="appendToInput('5')">5</button> <button onclick="appendToInput('6')">6</button> <button onclick="appendToInput('*')">×</button><br> <button onclick="appendToInput('1')">1</button> <button onclick="appendToInput('2')">2</button> <button onclick="appendToInput('3')">3</button> <button onclick="appendToInput('-')">-</button><br> <button onclick="appendToInput('0')">0</button> <button onclick="appendToInput('.')">.</button> <button onclick="calculate()">=</button> <button onclick="appendToInput('+')">+</button><br> <script> function appendToInput(val) { document.getElementById('input').value += val; } function clearInput() { document.getElementById('input').value = ''; } function backspace() { var input = document.getElementById('input').value; document.getElementById('input').value = input.substring(0, input.length - 1); } function calculate() { var input = document.getElementById('input').value; var result = eval(input); document.getElementById('input').value = result; } </script> </body> </html> ``` 这个计算器的界面由一些按钮和一个输入框组成,按钮被点击时会调用对应的JavaScript函数。`appendToInput`函数用于将按钮的值添加到输入框中,`clearInput`函数用于清空输入框,`backspace`函数用于删除输入框中的最后一个字符,`calculate`函数用于计算输入框中的表达式并将结果显示在输入框中。注意,这个计算器的计算方法使用了JavaScript内置的`eval`函数,这个函数可以计算字符串表达式的值,但是需要注意安全问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值