科学计算器怎么用:复杂表达式、函数与安全求值实测

一行写完带括号和函数的式子,本地计算不上传

算一个简单的 12+8,系统自带的计算器就够了。但遇到 (1+2)*3^2 这种带括号和幂的式子,或者要算 log(100)sin(pi/2),用手机自带的普通计算器往往要拆成好几步,中间一步按错就得重来。

这篇用 NBTools 的科学计算器讲清楚:怎么把一整行表达式一次算完、支持哪些函数和常量、以及两个最容易算错的地方。工具在浏览器本地求值,表达式不上传服务器

一行写完整个算式

在输入框里直接写出完整表达式,点等号即得结果,不需要分步。比如:

  • (1+2)*3^227(先括号、再幂、最后乘)
  • 2^101024
  • sqrt(9)+abs(-4)7

一次性写清的好处是:运算优先级由工具按数学规则处理,你不用自己记住"先算哪一步",也就避免了分步计算时手滑按错。

支持的函数与常量

类型写法示例结果
四则运算+ - * /(1+2)*412
^2^101024
函数sqrt 平方根sqrt(9)3
函数log 常用对数(以10为底)log(100)2
函数sin / cos / tansin(pi/2)1
函数abs 绝对值abs(-4)4
常量pi / e2*pi6.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 · 更新于 2026年9月12日 · 阅读约 5 分钟