算一个简单的 12+8,系统自带的计算器就够了。但遇到 (1+2)*3^2 这种带括号和幂的式子,或者要算 log(100)、sin(pi/2),用手机自带的普通计算器往往要拆成好几步,中间一步按错就得重来。
这篇用 NBTools 的科学计算器讲清楚:怎么把一整行表达式一次算完、支持哪些函数和常量、以及两个最容易算错的地方。工具在浏览器本地求值,表达式不上传服务器。
一行写完整个算式
在输入框里直接写出完整表达式,点等号即得结果,不需要分步。比如:
(1+2)*3^2→ 27(先括号、再幂、最后乘)2^10→ 1024sqrt(9)+abs(-4)→ 7
一次性写清的好处是:运算优先级由工具按数学规则处理,你不用自己记住"先算哪一步",也就避免了分步计算时手滑按错。
支持的函数与常量
| 类型 | 写法 | 示例 | 结果 |
|---|---|---|---|
| 四则运算 | + - * / | (1+2)*4 | 12 |
| 幂 | ^ | 2^10 | 1024 |
| 函数 | sqrt 平方根 | sqrt(9) | 3 |
| 函数 | log 常用对数(以10为底) | log(100) | 2 |
| 函数 | sin / cos / tan | sin(pi/2) | 1 |
| 函数 | abs 绝对值 | abs(-4) | 4 |
| 常量 | pi / e | 2*pi | 6.2831853072 |
| 括号 | ( ) | 2^(3^2) | 512 |
函数名后必须加括号:写 sqrt(9),不要写 sqrt 9。结果默认保留 10 位小数,多余位数自动舍去。
两个最容易算错的地方
1. 幂运算是右结合
2^3^2 的结果是 512,不是 64。因为 ^ 是右结合,会被理解为 2^(3^2) = 2⁹。如果你想要的是 (2^3)^2 = 64,请把括号明确写上。
2. 三角函数用弧度,不是角度
很多人输入 sin(30) 期待得到 0.5,实际得到的是 -0.988——因为这里按弧度计算。想要"30 度"的正弦,要写成 sin(30*pi/180),结果才是 0.5。反过来,sin(pi/2) 恰好等于 1,就是因为 π/2 弧度 = 90 度。
为什么不用 eval:安全求值
很多网页计算器图省事,直接把用户输入丢给 JavaScript 的 eval() 执行。这等于让访客在页面上执行任意代码,存在被注入攻击的风险。
本工具改用自研解析器,分两步:
- 词法解析:把表达式拆成数字、运算符、函数名、常量这些 token,遇到白名单之外的字符直接报"非法字符"。
- 调度场算法:中缀表达式转后缀,正确处理优先级、括号和右结合的幂。
只有白名单里的函数(sqrt/log/sin/cos/tan/abs)和常量(pi/e)可被调用,输入 alert(1) 这类内容会提示"未知函数",不会被执行。
分场景怎么用
- 对账、报销凑单:整行写
128*3+45*2-100,比按十几次计算器快。 - 面积体积:用
pi常量,如圆面积pi*5^2→ 78.54。 - 工程/作业里的对数:
log是以 10 为底的常用对数,log(1000)= 3。 - 负数运算:直接写
-5+3即可,一元负号会被正确处理。
注意:暂不支持百分号 %。要算 5%,请写成 0.05(例如 200*0.05)。
常见问题
log 是自然对数还是常用对数
是常用对数(以 10 为底)。log(100) 得 2,log(1000) 得 3。如果你需要自然对数 ln,可以用换底公式写成 log(x)/log(e)。
输入 sin(30) 为什么不是 0.5
因为三角函数采用弧度制。要算 30 度的正弦,写成 sin(30*pi/180),结果为 0.5。
支持百分号和负数吗
支持负数(如 -5+3);百分号暂不支持,请用小数替代,5% 写成 0.05。
提示"未知函数"或"非法字符"怎么办
说明用到了白名单之外的函数或符号。目前支持 sqrt/log/sin/cos/tan/abs 与常量 pi/e,运算符为 + - * / ^ ( )。检查函数名拼写,并确认函数名后加了括号。
计算过程会上传吗
不会。全部计算在浏览器本地完成,表达式不上传服务器,刷新页面即清空。
相关工具
- NBTools 科学计算器:https://nbtools.cn/tools/calculator
- 进制转换:二/八/十/十六进制互转,支持大数
- 单位换算器:长度、重量、温度等数十种单位互转