当前位置:首页 > JavaScript

在线计算器js实现

2026-01-31 07:17:11JavaScript

实现基础计算器功能

创建一个简单的HTML文件,包含数字按钮、运算符按钮和显示区域。使用JavaScript处理按钮点击事件并执行计算。

<!DOCTYPE html>
<html>
<head>
    <title>在线计算器</title>
    <style>
        .calculator {
            width: 200px;
            margin: 0 auto;
            padding: 20px;
            border: 1px solid #ccc;
            border-radius: 5px;
        }
        #display {
            width: 100%;
            height: 40px;
            margin-bottom: 10px;
            text-align: right;
            font-size: 20px;
        }
        .buttons {
            display: grid;
            grid-template-columns: repeat(4, 1fr);
            grid-gap: 5px;
        }
        button {
            height: 40px;
            font-size: 18px;
        }
    </style>
</head>
<body>
    <div class="calculator">
        <input type="text" id="display" readonly>
        <div class="buttons">
            <button onclick="appendToDisplay('7')">7</button>
            <button onclick="appendToDisplay('8')">8</button>
            <button onclick="appendToDisplay('9')">9</button>
            <button onclick="appendToDisplay('/')">/</button>
            <button onclick="appendToDisplay('4')">4</button>
            <button onclick="appendToDisplay('5')">5</button>
            <button onclick="appendToDisplay('6')">6</button>
            <button onclick="appendToDisplay('*')">*</button>
            <button onclick="appendToDisplay('1')">1</button>
            <button onclick="appendToDisplay('2')">2</button>
            <button onclick="appendToDisplay('3')">3</button>
            <button onclick="appendToDisplay('-')">-</button>
            <button onclick="appendToDisplay('0')">0</button>
            <button onclick="appendToDisplay('.')">.</button>
            <button onclick="calculate()">=</button>
            <button onclick="appendToDisplay('+')">+</button>
            <button onclick="clearDisplay()">C</button>
        </div>
    </div>

    <script>
        function appendToDisplay(value) {
            document.getElementById('display').value += value;
        }

        function clearDisplay() {
            document.getElementById('display').value = '';
        }

        function calculate() {
            try {
                const result = eval(document.getElementById('display').value);
                document.getElementById('display').value = result;
            } catch (error) {
                document.getElementById('display').value = 'Error';
            }
        }
    </script>
</body>
</html>

增强计算器安全性

使用eval函数存在安全风险,可以替换为更安全的解析方式。创建一个函数来解析数学表达式。

function calculate() {
    const expression = document.getElementById('display').value;
    try {
        const tokens = expression.match(/(\d+\.?\d*)|([+\-*/])/g);
        if (!tokens) return;

        let result = parseFloat(tokens[0]);
        for (let i = 1; i < tokens.length; i += 2) {
            const operator = tokens[i];
            const operand = parseFloat(tokens[i+1]);

            switch (operator) {
                case '+': result += operand; break;
                case '-': result -= operand; break;
                case '*': result *= operand; break;
                case '/': result /= operand; break;
                default: throw new Error('Invalid operator');
            }
        }
        document.getElementById('display').value = result;
    } catch (error) {
        document.getElementById('display').value = 'Error';
    }
}

添加高级计算功能

扩展计算器功能,支持平方根、幂运算等高级功能。

<button onclick="squareRoot()">√</button>
<button onclick="power()">^</button>
<button onclick="percentage()">%</button>

<script>
    function squareRoot() {
        const value = parseFloat(document.getElementById('display').value);
        if (value >= 0) {
            document.getElementById('display').value = Math.sqrt(value);
        } else {
            document.getElementById('display').value = 'Error';
        }
    }

    function power() {
        document.getElementById('display').value += '';
    }

    function percentage() {
        const value = parseFloat(document.getElementById('display').value);
        document.getElementById('display').value = value / 100;
    }
</script>

支持键盘输入

添加事件监听器,允许用户通过键盘输入数字和运算符。

document.addEventListener('keydown', function(event) {
    if (/[0-9+\-*/.=]/.test(event.key)) {
        if (event.key === '=' || event.key === 'Enter') {
            calculate();
        } else {
            appendToDisplay(event.key);
        }
    } else if (event.key === 'Escape') {
        clearDisplay();
    } else if (event.key === 'Backspace') {
        const display = document.getElementById('display');
        display.value = display.value.slice(0, -1);
    }
});

添加记忆功能

实现记忆存储和读取功能,增强用户体验。

<button onclick="memoryStore()">MS</button>
<button onclick="memoryRecall()">MR</button>
<button onclick="memoryClear()">MC</button>

<script>
    let memory = 0;

    function memoryStore() {
        const value = document.getElementById('display').value;
        if (value && !isNaN(value)) {
            memory = parseFloat(value);
        }
    }

    function memoryRecall() {
        document.getElementById('display').value = memory;
    }

    function memoryClear() {
        memory = 0;
    }
</script>

处理连续运算

改进计算逻辑,支持连续运算而不需要每次都按等号。

let lastOperation = null;
let firstOperand = null;

function handleOperation(operation) {
    const currentValue = parseFloat(document.getElementById('display').value);

    if (firstOperand === null) {
        firstOperand = currentValue;
    } else if (lastOperation) {
        firstOperand = performCalculation(firstOperand, currentValue, lastOperation);
        document.getElementById('display').value = firstOperand;
    }

    lastOperation = operation;
    document.getElementById('display').value = '';
}

function performCalculation(a, b, op) {
    switch (op) {
        case '+': return a + b;
        case '-': return a - b;
        case '*': return a * b;
        case '/': return a / b;
        default: return b;
    }
}

function calculate() {
    const currentValue = parseFloat(document.getElementById('display').value);
    if (firstOperand !== null && lastOperation) {
        const result = performCalculation(firstOperand, currentValue, lastOperation);
        document.getElementById('display').value = result;
        firstOperand = result;
        lastOperation = null;
    }
}

在线计算器js实现

标签: 在线计算器
分享给朋友:

相关文章

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在H…

在线jquery

在线jquery

jQuery CDN 链接 以下是常用的 jQuery CDN(内容分发网络)链接,可直接在 HTML 文件中引入: jQuery 3.x(最新稳定版) <script src="…

实现vue文件在线编辑

实现vue文件在线编辑

实现 Vue 文件在线编辑的方案 基于 Monaco Editor 的解决方案 Monaco Editor 是 VS Code 的底层编辑器,支持语法高亮、代码补全等功能。安装依赖: npm…

react如何在线访问

react如何在线访问

React 在线访问的实现方式 React 应用可以通过多种方式实现在线访问,具体取决于部署环境和需求。以下是常见的几种方法: 部署到静态网站托管服务 将 React 应用构建为静态文件后,可以部…

react实现计算器

react实现计算器

React 实现计算器的步骤 创建 React 项目 使用 create-react-app 或 Vite 初始化项目: npx create-react-app calculator # 或 np…

react实现在线文档

react实现在线文档

React 实现在线文档的方法 使用 React 实现在线文档可以通过多种方式完成,以下是几种常见的方法和工具: 使用 Markdown 和 React 结合 Markdown 是一种轻量级标记语言…