前端练习——四则计算器(二)


前文: 四则计算器(一)
对前文的四则计算器做如下改进:

  1. 处理小数点,不出现13.2.2这种情况
  2. 增加清零、删除功能
  3. 增加历史记录功能

处理小数点、处理符号

1. 问题描述

处理思路:当点击小数点的时候,函数判断当前的字符串到上一个运算符之前有没有小数点。如果有,就不允许输入小数点了
再次观察自己的实现方式,发现这样的代码(没有做任何校验)会出现下图所示的情况:
实际上,应该对所有的符号做处理,不应该将+ - * /放在onclicknum函数中做处理

var numresult;
var str;
function onclicknum(nums) {
   
    str = document.getElementById("nummessege");
    str.value = str.value + nums;
}
function onclickresult() {
   
    str = document.getElementById("nummessege");
    numresult = eval(str.value);
    str.value = numresult;
}

在这里插入图片描述

2. 解决方法

错误的情况:

  1. 运算符没有算子
    当输入符号时,不允许上一个字符是符号
  2. 小数
    当输入小数点时,到上一个操作符为止,不允许有小数点
var numresult;
var str;
function onclicknum(nums) {
   
    str = document.getElementById("nummessege");
    str.value = str.value + nums;
}
function onclickresult() {
   
    str = document.getElementById("nummessege");
    if (isOperator(str.value.charAt(str.value.length - 1)) || isPoint(str.value.charAt(str.value.length - 1))) {
   
        str.value = str.value.substring(0, str.value.length-1); //若最后一个字符是符号,则删除
    }
    numresult = eval(str.value);
    str.value = numresult;
}
function onclicksymbol(symbol) {
   
    str = document.getElementById("nummessege");
    if (isOperator(str.value.charAt(str.value.length - 1)) || isPoint(str.value.charAt(str.value.length - 1))) {
   
        return 0;
    } else {
   
        //上一个字符不是符号
        if (symbol == `.`) {
   
            //输入小数点,判断到前一个运算符前有没有小数点,
            //如果没有,就可以,如果有,就不行。
            for (var i = str.value.length - 2; i >= 0; i--) {
   
                console.log(str.value.charAt(i));
                if (isPoint(str.value.charAt(i))) {
   
                    return 0;
                } else if (isOperator(str.value.charAt(i))) {
   
                    break;
                }
            }
        }
        str.value = str.value + symbol;
    }

}

function isOperator(char_isOperator) {
   
    if (char_isOperator == '+' || char_isOperator == '-' || char_isOperator == '*' || char_isOperator == '/') {
   
        return true;
    }
    return false;
}
function isPoint(char_isPoint) {
   
    if (char_isPoint == `.`) {
   
        return true;
    }
    return false;
}

清零和删除

  1. 增加按键
  2. 增加处理逻辑,清零则清空输入区,退格则删除最后一个数字

.html文件

        <tr>
            <td colspan="2">
                <input class=col2 type="button" value="CE" id=
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值