HTML+CSS+JS计算器
效果图

计算器功能详解
本计算器实现了多种功能,以下是所有功能的详细说明:
-
清空显示框 ©
- 功能: 清除显示框中的所有内容。
- 解释: 该功能用于重置计算器状态,清空当前输入的内容,使用户可以重新开始输入。
-
输入数字 (0-9)
- 功能: 将数字输入到显示框中。
- 解释: 数字按钮用于输入数学表达式中的数字部分。点击这些按钮会将相应的数字添加到显示框中。
-
输入小数点 (.)
- 功能: 在显示框中添加小数点。
- 解释: 小数点按钮用于输入小数。如果输入的数字中还没有小数点,则可以添加小数点,以便输入浮点数。
-
*输入操作符 (+, -, , /)
- 功能: 在显示框中添加数学运算符。
- 解释: 操作符按钮用于进行基本的数学运算,如加法、减法、乘法和除法。点击这些按钮会在显示框中添加相应的操作符。
-
输入括号 ((), () )
- 功能: 在显示框中添加左括号和右括号。
- 解释: 括号按钮用于在数学表达式中分组,影响运算顺序。点击左括号
(可以开始一个新的子表达式,而右括号)可以结束当前子表达式。
-
计算结果 (=)
- 功能: 计算显示框中的数学表达式的结果。
- 解释: 等号按钮触发表达式的计算,显示计算结果。使用
eval函数来计算表达式,处理括号和运算符。
-
内存清除 (MC)
- 功能: 清除内存中的值。
- 解释: 该功能用于将内存中的值重置为零,确保之前保存的值不再被使用。
-
内存召回 (MR)
- 功能: 从内存中恢复并显示值。
- 解释: 该功能将内存中保存的值显示到计算器的显示框中,便于进行进一步的运算。
-
内存加 (M+)
- 功能: 将当前显示的值加到内存中。
- 解释: 该功能将显示框中的值加到内存中保存的值上。用于在多次计算中积累结果。
-
内存减 (M-)
- 功能: 从内存中减去当前显示的值。
- 解释: 该功能将显示框中的值从内存中保存的值中减去。用于调整内存中的值。
源代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Calculator</title><style>body {display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #f0f4f8;margin: 0;font-family: Arial, sans-serif;}.calculator {border-radius: 15px;box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);background-color: white;width: 280px;padding: 10px;}#display {width: 100%;height: 50px;border: 1px solid #ccc;border-radius: 15px;text-align: right;padding: 10px;box-sizing: border-box;font-size: 24px;color: #333;margin-bottom: 10px;}.buttons {display: grid;grid-template-columns: repeat(4, 1fr);gap: 5px;}button {border: none;background-color: #007bff;color: white;font-size: 18px;padding: 15px;border-radius: 15px;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);cursor: pointer;}button:hover {background-color: #0056b3;}button:active {background-color: #004080;}</style>
</head>
<body><div class="calculator"><input type="text" id="display" readonly><div class="buttons"><button onclick="clearDisplay()">C</button><button onclick="appendOperator('(')">(</button><button onclick="appendOperator(')')">)</button><button onclick="appendOperator('/')">/</button><button onclick="appendNumber('7')">7</button><button onclick="appendNumber('8')">8</button><button onclick="appendNumber('9')">9</button><button onclick="appendOperator('*')">*</button><button onclick="appendNumber('4')">4</button><button onclick="appendNumber('5')">5</button><button onclick="appendNumber('6')">6</button><button onclick="appendOperator('-')">-</button><button onclick="appendNumber('1')">1</button><button onclick="appendNumber('2')">2</button><button onclick="appendNumber('3')">3</button><button onclick="appendOperator('+')">+</button><button onclick="appendNumber('0')">0</button><button onclick="appendOperator('.')">.</button><button onclick="calculateResult()">=</button><button onclick="memoryClear()">MC</button><button onclick="memoryRecall()">MR</button><button onclick="memoryAdd()">M+</button><button onclick="memorySubtract()">M-</button></div></div><script>let display = document.getElementById('display');let memory = 0;let shouldResetDisplay = false;function clearDisplay() {display.value = '';}function appendNumber(number) {if (shouldResetDisplay) {display.value = '';shouldResetDisplay = false;}display.value += number;}function appendOperator(operator) {if (shouldResetDisplay) {display.value = '';shouldResetDisplay = false;}display.value += ` ${operator} `;}function calculateResult() {try {// Evaluate the expression, considering possible parenthesesdisplay.value = eval(display.value);shouldResetDisplay = true;} catch {display.value = 'Error';}}function memoryClear() {memory = 0;}function memoryRecall() {display.value = memory;}function memoryAdd() {memory += parseFloat(display.value) || 0;}function memorySubtract() {memory -= parseFloat(display.value) || 0;}</script>
</body>
</html>
JS详解
当然,下面我会详细解释JavaScript部分的代码。
变量和初始化
let display = document.getElementById('display');
let memory = 0;
let shouldResetDisplay = false;
let display = document.getElementById('display');:这行代码通过getElementById方法获取页面中ID为display的元素,并将其赋值给display变量。这个元素是一个<input>标签,用于显示计算器的当前输入或结果。let memory = 0;:初始化一个变量memory,用于存储计算器的内存值。在这个例子中,内存值被初始化为0。let shouldResetDisplay = false;:这个变量是一个布尔值,用于控制是否需要重置显示。在计算结果之后,通常需要清空输入框,以便用户可以开始新的计算。
功能函数
清除显示
function clearDisplay() {display.value = '';
}
function clearDisplay() { ... }:定义了一个名为clearDisplay的函数,用于清空显示。当用户点击’C’按钮时,这个函数会被调用。display.value = '';:将输入框的值设置为空字符串,从而清空显示。
添加数字
function appendNumber(number) {if (shouldResetDisplay) {display.value = '';shouldResetDisplay = false;}display.value += number;
}
function appendNumber(number) { ... }:定义了一个名为appendNumber的函数,用于向显示中添加一个数字。if (shouldResetDisplay) { ... }:检查shouldResetDisplay变量,如果为true,则清空显示并重置标志。display.value += number;:将传入的数字number添加到输入框的当前值后面。
添加操作符
function appendOperator(operator) {if (shouldResetDisplay) {display.value = '';shouldResetDisplay = false;}display.value += ` ${operator} `;
}
function appendOperator(operator) { ... }:定义了一个名为appendOperator的函数,用于向显示中添加一个操作符。display.value +=${operator};`:将操作符添加到输入框的当前值后面,并在操作符前后添加一个空格,以保持表达式格式。
计算结果
function calculateResult() {try {// Evaluate the expression, considering possible parenthesesdisplay.value = eval(display.value);shouldResetDisplay = true;} catch {display.value = 'Error';}
}
function calculateResult() { ... }:定义了一个名为calculateResult的函数,用于计算显示中的表达式。try { ... } catch { ... }:使用try-catch语句来捕获并处理可能发生的错误。display.value = eval(display.value);:使用eval函数计算输入框中的表达式,并将结果赋值给display.value。shouldResetDisplay = true;:在计算结果后,设置shouldResetDisplay为true,以便在下次输入时清空显示。
内存操作
function memoryClear() {memory = 0;
}function memoryRecall() {display.value = memory;
}function memoryAdd() {memory += parseFloat(display.value) || 0;
}function memorySubtract() {memory -= parseFloat(display.value) || 0;
}
function memoryClear() { memory = 0; }:定义了一个名为memoryClear的函数,用于清空内存。function memoryRecall() { display.value = memory; }:定义了一个名为memoryRecall的函数,用于将内存中的值显示在输入框中。function memoryAdd() { memory += parseFloat(display.value) || 0; }:定义了一个名为memoryAdd的函数,用于将当前显示的值加到内存中。如果显示为空,则默认加0。function memorySubtract() { memory -= parseFloat(display.value) || 0; }:定义了一个名为memorySubtract的函数,用于从内存中减去当前显示的值。如果显示为空,则默认减0。
送大家一段话:
笔走龙蛇,意境深远。言之有物,情真意切。
辞藻华丽,意蕴深厚。文思敏捷,才华横溢。
洞若观火,鞭辟入里。文采飞扬,笔力雄健。
行云流水,流畅自然。精辟入里,洞察秋毫。
妙语连珠,引人入胜。深入骨髓,发人深省。
豁然开朗,醍醐灌顶。言之凿凿,掷地金声。
言近旨远,韵味无穷。淋漓尽致,曲尽其妙。
独具匠心,匠心独运。笔底春风,笔下生花。
字字玑珠,句句珠玑。意味深长,耐人寻味。
人话
写作技巧高超,文章意境深远。内容真实感人,情感表达真诚。用词华丽而富有内涵,作者思维敏捷且才华出众。观察事物深刻透彻,分析问题直击要害。文笔生动活泼,才华横溢。文章如同行云流水般流畅自然。分析精辟,能够洞察细微之处。言语中充满智慧,让人读来兴趣盎然。剖析问题深入本质,能引发读者深思。给人以豁然开朗的感觉,像醍醐灌顶一般让人清醒。言辞确凿有力,话语坚定响亮。言简意赅却含义深远,令人回味无穷。表达淋漓尽致,把事情描绘得细致入微。构思独特巧妙,展现了作者的独特匠心。文笔优美,仿佛春风拂面,笔下的文字如同花朵盛开。每个字都精心雕琢,每一句话都充满力量。文章意味深长,值得反复品味。
相关文章:
HTML+CSS+JS计算器
效果图 计算器功能详解 本计算器实现了多种功能,以下是所有功能的详细说明: 清空显示框 © 功能: 清除显示框中的所有内容。解释: 该功能用于重置计算器状态,清空当前输入的内容,使用户可以重新开始输入。 输入数字 (0-9) 功…...
EasyCVR视频汇聚平台云计算技术核心优势:高效、灵活与可扩展性深度解读
随着科技的飞速发展和社会的不断进步,视频监控已经成为现代社会治安防控、企业管理等场景安全管理中不可或缺的一部分。在这一背景下,EasyCVR视频汇聚平台凭借其强大的云计算技术,展现出了卓越的性能和广泛的应用前景。本文将深入解析EasyCVR…...
JavaScript高阶笔记总结(Xmind格式):第一天
Xmind鸟瞰图: 简单文字总结: js高阶知识总结: 理解Object: 1.返回一个由一个给定对象的自身可枚举属性组成的数组:Object.keys(对象名) 2.in 判断属性是否存在:"属性名" in 对象名 …...
十三、代理模式
文章目录 1 基本介绍2 案例2.1 Sortable 接口2.2 BubbleSort 类2.3 SortTimer 类2.4 Client 类2.5 Client 类的运行结果2.6 总结 3 各角色之间的关系3.1 角色3.1.1 Subject ( 主体 )3.1.2 RealObject ( 目标对象 )3.1.3 Proxy ( 代理 )3.1.4 Client ( 客户端 ) 3.2 类图 4 动态…...
Unity物理模块 之 2D效应器
本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 1.什么是效应器 2D 效应器 - Unity 手册 2D 效应器是与 2D 碰撞器一起使用的组件,相当于预先编写好的插…...
一款手机壳凭什么卖800元?Casetify品牌策略全解析 | 品牌出海
Casetify官网 巴黎奥运会,张怡宁的手机壳火了。 张怡宁在现场观战并使用手机的照片在网上流传,不是因为这位奥运前冠军,而是她的手机壳。这款满是「花花绿绿」图案的手机壳,迅速被网友发掘出是Casetify品牌的名为「炫彩花卉」的…...
【Rust光年纪】并发编程利器:探索 Rust 异步库与并行处理工具
构建高效异步应用:Rust 异步库详细解读 前言 在当今软件开发领域,Rust语言作为一种快速、安全和并发性能出色的编程语言,备受开发者青睐。随着Rust生态系统的不断扩大,越来越多的异步库和并行处理工具被引入到Rust开发中。本文将…...
机器学习第一课
1.背景 有监督学习:有标签(连续变量(回归问题:时间序列等)、分类变量(分类)) 无监督学习:没有标签(聚类、关联(相关性分析:哪些相关…...
C语言典型例题32
《C程序设计教程(第四版)——谭浩强》 习题2.9 编程序用getchar函数读入两个字符给c1,c2,然后分别用putchar函数和printf函数输出这两个字符。 (1)变量c1,c2应该定义为字符型或者整型吗&#x…...
第二十五天学习笔记2024.8.9
1、通过frp内网穿透共享数据库信息 [root1 ~]# mysql -p密码 mysql> create user li% identified by 1; mysql> create database test; mysql> grant all on test.* to li; [root1 ~]# tar -xf frp_0.33.0_linux_amd64.tar.gz [root1 ~]# cd frp_0.33.0_linux_a…...
sqlserver将一张表导出成txt
bcp zjwb_sb_20111122.dbo.ep_pb_groupvisitplace out c:/1.txt -n -U sa -P sa...
YOLOv8+DeepSort实现
目录 1,YOLOv8算法简介 2,DeepSort算法介绍 1. SORT目标追踪 3,实现流程 1.检测 2. 生成detections 3. 卡尔曼滤波预测 4.使用匈牙利算法将预测后的tracks和当前帧中的detections进行匹配 5. 卡尔曼滤波更新 4,代码实现 …...
「链表」链表原地算法合集:原地翻转|原地删除|原地取中|原地查重 / LeetCode 206|237|2095|287(C++)
概述 对于一张单向链表,我们总是使用双指针实现一些算法逻辑,这旨在用常量级别空间复杂度和线性时间复杂度来解决一些问题。 所谓原地算法,是指不使用额外空间的算法。 现在,我们利用双指针实现以下四种行为。 //Definition fo…...
【STM32】SPI通信和RTC实时时钟
个人主页~ SPI通信和RTC实时时钟 SPI通信一、简介二、硬件电路三、基本原理四、SPI时序1、时序基本单元2、时序 五、FLASH操作注意事项1、写入操作2、读取操作 六、SPI外设1、简介2、结构 七、传输方式1、主模式全双工连续传输2、非连续传输 RTC实时时钟一、Unix时间戳二、BKP1…...
DAMA学习笔记(十三)-大数据和数据科学
1.引言 大数据不仅指数据的量大,也指数据的种类多(结构化的和非结构化的,文档、文件、音频、视频、流数据等),以及数据产生的速度快。数据科学家是指从从数据中探究、研发预测模型、机器学习模型、规范性模型和分析方法…...
【Java】Java 中的 toLowerCase() 方法详解
我最爱的那首歌最爱的angel 我到什么时候才能遇见我的angel 我最爱的那首歌最爱的angel 我不是王子也会拥有我的angel 🎵 张杰《云中的angel》 在 Java 编程中,字符串处理是一个非常常见的任务。为了便于开发者操作和格式化字符串&…...
Linux: 进程概念详解
1. 冯诺依曼体系结构 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成 。 【注意】: a. 这里的存储器指的是内存 b. 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备) c.外…...
【C++】模板详细讲解(含反向迭代器)
欢迎来到我的Blog,点击关注哦💕 前言: C的模板在是泛型编程的重要组成部分,编写在不同类型上工作的代码,而无需为每个类型编写重复的代码,这有助于减少代码冗余并提高代码的可维护性。 模板 模板的介绍 …...
haproxy七层代理详解之-完整安装部署流程及负载均衡实现-及热更新方法
一.负载均衡 1.1负载均衡时什么 负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了衡将特定的业务(web服务、公司…...
C++11 bind
bind bind 用来将可调用对象和参数一起进行绑定。可调用对象包括普通函数、全局函 数、静态函数、类静态函数甚至是类成员函数,参数包括普通参数和类成员。绑定后的 结果,可以使用 std::function 进行保存,并延迟调用到我们需要的时候。 绑…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
