写给程序员使用的算式计算器。
可以直接在这里尝试使用此计算器。
如果您只想方便的线上使用,可以跳过之前的内容,直接浏览使用手册。
通过以下git命令将文件包下载到本地运行:
git clone https://github.com/YuyangGong/caculator.git
下载到本地后你将看到如下目录及文件:
caculator/
├── src/
│ ├── js/
│ │ ├── constants.js
│ │ ├── util.js
│ │ ├── status.js
│ │ ├── errorMessage.js
│ │ ├── core;.js
│ │ └── main.js
│ ├── less/
│ │ └── main.less
│ └── index.html
├── public/
│ ├── js/
│ │ ├── main.min.js
│ │ └── main.min.js.map
│ ├── css/
│ │ ├── main.min.css
│ │ └── main.min.css.map
│ └── index.html
├── test/
│ ├── main.test.js
│ └── mocha.opts
└── mochawesome-reports/
├── mochawesome.html
└── mochawesome.js
./src
目录中放置编译前的源文件,./public
目录中放置编译后的文件,./public/index.html
是项目的入口文件。源文件./src/js
中core.js
负责此算式计算器的内核,./main.js
负责页面交互,./constants.js
放置计算器所需常量,./util.js
放置计算器所需方法,./status.js
放置计算器模式状态,./errorMessage.js
负责计算器错误码对应的错误信息。在项目编写阶段采用TDD开发模式,引入了测试框架mocha, ./test
中放置的./test/main.test.js
是mocha的测试文件,./test/mocha.opts
是mocha的配置文件。为测试结果可视化,引入了mocha的插件mochawesome,./mochawesome-reports/mochawesome.html
展现了测试结果。
如果您对此项目有任何建议或者发现了漏洞可以在此处提个 issue。
- 支持加减乘除幂余基本运算
- 支持左右圆括号提升优先级
- 内置基本常量
- 内置基本方法
- 支持嵌套使用方法
- 支持新建自定义方法和常量
- 支持新建变量时使用已有方法及常量
- 支持三角函数的弧度与角度切换
- 支持输入错误时自定义报错
- 输入格式错误时,报错精确到列数
可以进行加减乘除余等基本运算,且能用左右圆括号进行提升优先级。如: (2+3-4)%2/3
幂运算符^,可以与其他运算符混用。
计算器内置必须的常量和强大的方法库,具体可见接下来的常量表和方法表
无论是内置的方法,还是自定义方法都可以嵌套使用,如之前提及的pow(pow(2,3),3)
代表 自然对数
代表 圆周率
arg 代表接受的参数数量,n代表无限制, >n代表最低为n, 最高不限制
代表 绝对值运算,abs(-1) = 1 (arg: 1)
代表 均值运算,avg(1,2) = 1.5 (arg: >2)
代表 正弦运算,sin(30) = 0.5 (arg:1)
代表 余弦运算,cos(60) = 0.5 (arg: 1)
代表 正切运算,tan(45) = 1 (arg: 1)
代表 余切运算,cot(45) = 1 (arg: 1)
代表 10底对数运算,log(100) = 2 (arg: 1)
代表 阶乘运算,fac(3) = 3*2*1 = 6 (arg: 1)
代表 最大公因数,HCF(6,4) = 2 (arg: 2)
代表 幂运算,pow(2,3) = 8 (arg: 2)
代表 求和运算, sum(2,3) = 5 (arg: >2)
可以创建自己的常量和方法, 合法的常量名只能包含数字、字母、下划线,并且只能由下划线和字母开头。
在上面内置方法表中,你可能会发现一个名叫HCF
的求最小公倍数的方法,那你可能会问,有没有相应的求最小公倍数的方法呢?答案是并没有,但是借助可以创建自定义方法,如果设置其方法名为gcd
, 设置其方法体为a*b/HCF(a,b)
,就可以使用gcd
方法来直接求最小公倍数了。
算术功能方面:
- 允许方法与括号之间、数值与运算符之间存在不影响计算的空格
- 允许幂运算符^连续使用(如: 2^3^4)和嵌套(如:(2+1)^3)
- 更精准的报错系统,应该精确到错误的列数,而不仅仅是只有错误信息
UI界面方面:
- 增加传统计算器界面,用户可以在传统计算器与输入栏计算器之间自由切换
- 增加自定义选项,用户可以切换不同的处理模式(如参数数量的严格模式及普通模式)
- 增加自定义方法和常量修改系统,用户可以对其自定义的常量及方法进行删、改,而不仅仅只有添加
- 移动端的配适
- 模拟输入框, 以代替原生输入框, 保证定位更精准。
代码算法方面:
- 取消eval的使用,完全用栈算法代替
- 精简代码,封装重复使用代码。
v1.0.0 初版本发布
v2.0.0 用栈重写项目,增加足量判断语句实现精确定位输入格式错误索引位置
yuyanggong