html实现计算器
<!-- 开始时间:2023.03.20
创作者:翟梦坤
内容:html计算机的实现
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>computer</title>
<script type="text/javascript">
//把字符串存入数组
var nums = new Array();
//需要相加的数存入的数组
var addNums = new Array();
//需要相减的数存入的数组
var delNums = new Array();
//记录加数数组的下标
var addFlag = 0;
//记录减数数组的下标
var delFlag = 0;
//nums数组的下标
var flag = 0;
//记录最终结果
var finalResult = 0;
// 数字与运算符输入处理函数
function input(number) {
nums[flag] = number;//把输入栏字符串存入nums数组
flag++;//下标同步加1
var result = document.getElementById("result1");//获取标签
result.innerHTML = result.innerHTML + number;//把新输入的值拼接在之前输入栏的位置
//处理多位数
// var i = 1;
// if (nums[flag-1] == '+' || nums[flag-1] == '-' || nums[flag-1] == '*' || nums[flag-1] == '/') {
// for(i;i<flag;i++){
// if(!isNaN(Number(nums[flag-i]))){//判断是否为数字
// var temp = '';
// var temp1 = '';
// temp=temp+nums[flag-i-1];
// for(var i=0;i<temp.length;i++){
// temp1[temp.length-i-1] = temp[i];
// }
// flag=flag-i-1;
// nums[flag]=Number(temp1);
// }else{
// return;
// }
// }
// }
}
//计算结果函数
function res() {
var result = document.getElementById("result1");//获取输入栏标签
var result1 = document.getElementById("result2");//获取输出栏标签
var res = 0;//结果保存
//var opers = '';
//var nums = '';
//var expression = result.innerHTML;
//result1.innerHTML = eval(expression);
//使用栈的思想完成
// for (var i = 0; i < expression.length; i++) {
// console.log(expression[i]);
// if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/') {
// opers = opers + expression[i];
// }else{
// nums = nums + expression[i];
// }
// } // for (var i = 0; i < opers.length; i++) {
// console.log(opers[i]);
// }
// for (var i = 0; i < nums.length; i++) {
// console.log(nums[i]);
// }
//遍历nums数组对数据以此进行判断处理,根据前后符号进行判断
for (var i = 0; i < nums.length; i++) {
if (nums[i] == '*') {//除法处理
if (nums[i - 2] == '+') {//乘号前为加号情况,把值存入加数数组
addNums[addFlag] = nums[i - 1] * nums[i + 1];
addFlag++;
} else if (nums[i - 2] == '-') {//乘号前为减号情况,把值存入减数数组
delNums[delFlag] = nums[i - 1] * nums[i + 1];
delFlag++;
} else if (nums[i - 2] == '*') {//连乘处理
addNums[addFlag - 1] = addNums[addFlag - 1] * nums[i + 1];
}
else {//前方无符号情况
addNums[addFlag] = nums[i - 1] * nums[i + 1];
addFlag++;
}
} else if (nums[i] == '/') {//除法处理
if (nums[i - 2] == '+') {//除号前为加号情况,把值存入加数数组
addNums[addFlag] = nums[i - 1] / nums[i + 1];
addFlag++;
} else if (nums[i - 2] == '-') {//除号前为减号处理,把值存入减数数组
delNums[delFlag] = nums[i - 1] / nums[i + 1];
delFlag++;
} else if (nums[i - 2] == '/') {//连除情况处理
addNums[addFlag - 1] = addNums[addFlag - 1] / nums[i + 1];
} else {//前方无符号情况
addNums[addFlag] = nums[i - 1] / nums[i + 1];
addFlag++;
}
} else if (nums[i] == '+') {//加法处理
if (i + 2 == nums.length) {//只有两个数的情况,分别存入对应数组
addNums[addFlag] = nums[i - 1];
addFlag++;
addNums[addFlag] = nums[i + 1];
addFlag++;
} else if ((nums[i + 2] == '*' || nums[i + 2] == '/') && (nums[i - 2] == '*' || nums[i - 2] == '/')) {//乘法+乘法情况,不做处理让乘号部分自己处理
} else {//前方无符号情况
addNums[addFlag] = nums[i - 1];
addFlag++;
}
} else if (nums[i] == '-') {//减法处理
if ((nums[i + 2] == '*' || nums[i + 2] == '/') && (nums[i - 2] == '*' || nums[i - 2] == '/')) {
} else if (nums[i - 2] == '-' || nums[i - 2] == '*' || nums[i - 2] == '/') {//前方有-,*,/符号情况,后方数字放入减数数组
delNums[delFlag] = nums[i + 1];
delFlag++;
} else if (nums[i + 2] == '*' || nums[i + 2] == '/') {//后方符合为*,/情况,前方数字放入加法数组
addNums[addFlag] = nums[i - 1];
addFlag++;
} else if (nums[i + 2] == '+') {//后方符号为+情况,分别放入对应数组
delNums[delFlag] = nums[i + 1];
delFlag++;
addNums[addFlag] = nums[i - 1];
addFlag++;
} else if (nums[i - 1] == '+') {//负值情况,放入减数数组
delNums[delFlag] = nums[i + 1];
delFlag++;
} else {//前方无符号情况
addNums[addFlag] = nums[i - 1];
addFlag++;
delNums[delFlag] = nums[i + 1];
delFlag++;
}
} else if (nums[i] == '%') {//整除情况
addNums[addFlag] = nums[i - 1] % nums[i + 1];
addFlag++;
}
}
//遍历把加数数组中的数据相加
for (var i = 0; i < addNums.length; i++) {
finalResult = finalResult + addNums[i];
}
//遍历把减数数组中的数据减去
for (var i = 0; i < delNums.length; i++) {
finalResult = finalResult - delNums[i];
}
//将结果显示
if (finalResult % 1 != 0) {
result1.innerHTML = finalResult.toFixed(8);
} else {
result1.innerHTML = finalResult;
}
//将所有数据恢复成初始状态
nums = new Array();
addNums = new Array();
delNums = new Array();
addFlag = 0;
delFlag = 0;
flag = 0;
finalResult = 0;
}
//删除一位处理函数
function del() {
var result = document.getElementById("result1");//获取标签
var len = result.innerHTML.length;//获取输入栏输入的长度
result.innerHTML = result.innerHTML.substr(0, len - 1);//使用substr截取掉一位再保存
flag--;//对nums数组下标同步减一
}
// 清除全部内容
function clear1() {
var result = document.getElementById("result1");//获取标签
result.innerHTML = "";//输入显示栏设置为空值
var result1 = document.getElementById("result2");//获取标签
result1.innerHTML = "";//输出显示栏设置为空值
}
</script>
</head>
<body>
<!-- 顶部样式 -->
<div id="top">
<div id="calc-title">计算器</div>
</div>
<!-- 结果输出栏样式 -->
<div id="result" name="result">
<div id="result1"></div>
<div id="result2"></div>
</div>
<!-- 按钮输入组件 -->
<div id="button">
<div onclick="clear1()">AC</div>
<div onclick="input('-')">+/-</div>
<div onclick="input('%')">%</div>
<div onclick="input('/')">÷</div>
<div onclick="input(7)">7</div>
<div onclick="input(8)">8</div>
<div onclick="input(9)">9</div>
<div onclick="input('*')">*</div>
<div onclick="input(4)">4</div>
<div onclick="input(5)">5</div>
<div onclick="input(6)">6</div>
<div onclick="input('-')">-</div>
<div onclick="input(1)">1</div>
<div onclick="input(2)">2</div>
<div onclick="input(3)">3</div>
<div onclick="input('+')">+</div>
<div onclick="input(0)">0</div>
<div onclick="del()">del</div>
<div onclick="input('.')">.</div>
<div onclick="res()">=</div>
</div>
</body>
<style>
/* 设置顶部标题栏样式 */
#top {
width: 446px;
height: 50px;
margin: auto;
background-color: #8b918f;
border: solid 2px rgb(7, 7, 7);
/* border-radius: 10px; */
/* border-top-left-radius: 10px; */
}
/* 标题栏字体样式 */
#calc-title {
font-size: 22px;
color: white;
float: right;
margin-top: 10px;
margin-right: 10px;
}
/* 设置结果显示栏样式 */
#result {
width: 446px;
height: 100px;
margin: auto;
text-align: right;
background-color: white;
border: solid 2px rgb(7, 7, 7);
font-size: 30px;
}
/* 设置输入行样式 */
#result1 {
font-size: 30px;
text-align: right;
}
/* 设置输出行样式 */
#result2 {
font-size: 30px;
text-align: right;
}
/* 设置按钮区域的样式 */
#button {
width: 450px;
height: 422px;
background-color: rgb(3, 3, 3);
margin: auto;
}
/* 设置按钮的样式 */
#button div {
width: 108px;
height: 80px;
float: left;
background-color: #ced8d5;
margin: 2px;
line-height: 80px;
text-align: center;
font-size: 26px;
}
/* 使用伪类选择器设置鼠标悬停效果 */
#button div:hover {
background-color: rgb(100, 235, 235);
}
</style>
</html>
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎