当前位置:首页 > 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>

处理连续运算

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

在线计算器js实现

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实现pdf在线预览

js实现pdf在线预览

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

Vue在线表格实现

Vue在线表格实现

Vue在线表格实现方案 使用Element UI的el-table组件 Element UI提供了功能强大的表格组件el-table,支持排序、筛选、分页等常见功能。安装Element UI后可直接使…

vue实现文件在线加载

vue实现文件在线加载

实现文件在线加载的基本方法 在Vue中实现文件在线加载,通常需要结合前端文件处理和后端服务支持。以下是几种常见的方法: 使用input标签和FileReader API 在Vue组件中添加input…

vue实现word在线编辑

vue实现word在线编辑

Vue 实现 Word 在线编辑 要实现 Vue 中的 Word 在线编辑功能,通常需要集成第三方库或 API。以下是几种常见的方法: 使用 Office Web 编辑器 Microsoft 提供了…

react如何在线访问

react如何在线访问

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

php实现计算器代码

php实现计算器代码

以下是一个简单的PHP计算器实现代码示例,支持加减乘除运算: 基础实现代码 <?php $result = 0; if ($_SERVER["REQUEST_METHOD"] == "POST…