You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS实现简易计算器前置0计算错误、除0返回Infinity问题求解

问题根源

  • 前导零数字计算异常:JavaScript 中以0开头且不含小数点的数字会被默认识别为八进制数,012的八进制值对应十进制的10,因此012 + 3运算结果为13,不符合预期。
  • 除以0返回Infinity:JavaScript 中数值除以0不会触发运行时异常,eval执行后会直接返回Infinity或-Infinity,无法被现有try catch捕获,因此不会进入错误分支。

适配现有代码的修改方案

只需要修改case '='对应的逻辑块即可,修改后完整代码如下:

let output = document.getElementById('output');

let cells = Array.from(document.getElementsByClassName('cell'));

cells.map(cell => {
    cell.addEventListener('click', (e) => {
        switch (e.target.innerText) {
            case 'C':
                output.innerText = '';
                break;

            case '=':
                try {
                    // 处理前导零:仅替换非小数场景的前导零,不影响0.xx类合法小数
                    let express = output.innerText.replace(/(\D|^)0+(\d+)/g, '$1$2');
                    let res = eval(express);
                    // 判断结果是否为有限值,覆盖除以0、非法运算场景
                    output.innerText = isFinite(res) ? res : 'Error';
                } catch {
                    output.innerText = 'Error!';
                }
                break;

            default:
                output.innerText += e.target.innerText;

        }
    });
});

内容的提问来源于stack exchange,提问作者Valentina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:18:00