HandyTools Hub

科学计算器

支持三角函数、对数、阶乘等高级计算功能。

 
0

历史

尚无计算

这是一个基于浏览器、使用自写表达式解析器的科学计算器。它处理便携计算器应有的四则运算,并额外支持三角函数、对数、幂、开方和阶乘;它通过一条可见的表达式行展示运算过程,而不是只显示一个不断变化的数字。由于解析器是自研的,工具不调用 JavaScript 的 eval(),你输入的任何内容都不会离开页面。

使用方法

可以直接在显示屏上键入,也可以点击屏幕按键。两种方式构建的是同一个表达式字符串。

  1. 输入表达式,例如 3 + 4 * 2。
  2. 求值前先为三角函数选择 DEG 或 RAD。
  3. 按 = 或回车。结果会替换显示屏上的表达式,完整表达式显示在其上方。
  4. 用功能键输入 sqrt、log、ln、log2、sin、cos、tan 及其反函数,pi 和 e 键插入常数。
  5. 用 C 键清除,开始一次新的计算。

布局是响应式的,同一套键盘在手机屏幕上无需缩放即可使用。

实操示例

表达式模式结果原因
18 + 24 / 6任意22除法比加法结合更紧
sin(30)DEG0.530 度化为 pi/6 弧度
sin(pi/2)RAD1弧度下的四分之一圈
log(1000)任意3log 以 10 为底
ln(e)任意1e 的自然对数
5!任意1205 * 4 * 3 * 2 * 1
2^3^2任意512右结合:2^9
sqrt(2)任意1.41421356...无理数,显示为舍入值
17 % 5任意2求余,不是百分比

这些例子也可用来快速确认你处在预期的角度模式。如果 sin(30) 返回接近 0.988 而不是 0.5,说明你在 RAD 模式。

解析器如何求值

输入分三个阶段处理,全程都不使用 eval():

  1. 分词 —— 字符串被拆分为数字、运算符、函数名、常数、括号和后缀 !。空格被忽略,因此 1 + 2 与 1+2 相同。
  2. 调度场算法 —— 借助运算符优先级栈,把记号重排为逆波兰记法。结合性就在这里确定。
  3. RPN 求值 —— 从左到右消费一个数值栈,得到最终值。

优先级从松到紧:

层级运算符结合性
1+ -左
2* / %左
3^右
4!(后缀)—

一元负号在分词阶段处理:出现在表达式开头,或紧跟在 (、^、*、/、%、+ 或另一个 - 之后的 -,会被并入后面的数字。因此 -3^2 变成 (-3)^2 = 9。如果你想要常规的 -(3^2),请自己加上括号。

角度与弧度

DEG/RAD 开关只影响 sin、cos、tan、asin、acos 和 atan;算术和对数不受影响。

在 DEG 模式下,工具会机械地重写表达式。正向三角函数调用的参数乘以 pi / 180,反三角调用的结果乘以 180 / pi。也就是说:

  • sin(90) DEG = 1
  • cos(180) DEG = -1
  • atan(1) DEG = 45
  • sin(1) DEG ≈ 0.0174524(1 度,不是 1 弧度)

在 RAD 模式下,函数直接映射到 JavaScript 的 Math 库,因此 tan(pi/4) = 1,asin(1) ≈ 1.5707963。

什么会触发错误

计算器会报告一小类错误,而不是显示 NaN 或 Infinity:

  • 除以零 —— 5 / 0 被拒绝,而不是返回 Infinity。
  • 负数或非整数阶乘 —— (-3)! 和 0.5! 都失败;0! 没问题。
  • 括号不匹配 —— 未闭合或多出的 ) 会中断求值。
  • 非有限结果 —— sqrt(-1)、ln(-1) 和 log(0) 都会产生 NaN 或无穷,工具会将其标记。这里不支持复数。

还有两个限制值得了解。结果使用 IEEE-754 双精度,因此 0.1 + 0.2 会显示为 0.30000000000000004;工具不会四舍五入到固定小数位。另外函数名按整体匹配,所以必须写 sin(30) 而不能写 sin 30。

实用技巧

  • 在数字与常数或函数之间显式写出 *。2pi 不是隐式乘法:分词器会得到两个相邻操作数,求值以 Invalid expression 失败。请写 2*pi。
  • 不支持科学计数法输入。1e3 会被读成数字 1、常数 e、再是 3,无法求值。请输入 1000,或用 10^3 来表示这个幂。
  • 允许以小数点开头,因此 .5 和 0.5 结果相同。
  • 当幂次的含义很关键时,把负底数用括号包起来。分词器会把开头的负号并入数字,所以 -2^2 被当作 (-2)^2 = 4。若按通常的数学读法,请写 -(2^2) 得到 -4。
  • 用表达式内的除法检查分数。22/7 返回 3.142857142857143,一个常见的 pi 近似值。
  • 结果可以从显示屏上选中并复制,便于粘贴到文档或另一次计算中。

使用场景

  • 检查三角函数、对数和阶乘作业,而手机计算器应用往往隐藏运算过程。
  • 快速工程运算,希望 pi、e、log2 和 sqrt 都在一屏之内。
  • 在课堂上演示运算符优先级和 DEG/RAD 换算,因为表达式与结果始终同时可见。
  • 统计与组合数学,中等规模数字的阶乘很常见。

相关工具

常见问题

这个计算器支持哪些函数和常数?

它支持四则运算以及取模(%)、用 ^ 表示幂、平方根(sqrt)、阶乘(!)、以 10 为底的对数(log)、自然对数(ln)、以 2 为底的对数(log2),还有三角函数 sin、cos、tan 及其反函数 asin、acos、atan。常数 pi 和 e 可用,log2 被识别为独立函数而不是 log(2)。

为什么 sin(30) 在 DEG 模式下是 0.5,在 RAD 模式下却不同?

DEG 模式会在求值前重写参数:sin(30) 变成 sin(30 * pi / 180),即 sin(pi/6) = 0.5。RAD 模式直接把 30 传进去,而 30 弧度约为 0.988。反函数则反向换算,因此 asin(0.5) 在 DEG 模式下返回 30,在 RAD 模式下约为 0.5236。

2^3^2 是按 (2^3)^2 还是 2^(3^2) 计算?

按数学标准记法从右到左计算。幂运算符是右结合的,因此 2^3^2 解析为 2^(3^2) = 2^9 = 512,而不是 64。其余所有二元运算符都是左结合。

% 按钮是用来算百分比的吗?

不是。% 是取模(求余)运算符,所以 17 % 5 = 2。要计算某个值的百分比,请把它写成分数,例如 200 * 15 / 100 = 30。

为什么 0.5! 会报错?

在这里阶乘只对非负整数有定义。0.5! 因为不是整数而失败,(-3)! 因为负数阶乘无定义而失败。0! 是允许的,返回 1。

sin、sqrt 这类函数名后面必须加括号吗?

必须,始终要加。sin(90) 没有歧义,但 sin90 会把函数留在运算符栈上,而在更长的表达式如 sin30+2 中,函数会吞下整个和式,算出 sin(32)。每个函数都要写成 名称(参数)。

由 HandyTools Hub 团队审校 · 最后更新