科学计算器功能扩展设计
日期: 2026-07-28
状态: 待实现
范围: 桌面端 CalculatorDesktop 组件(移动端 CalculatorMobile 保持不变)
1. 背景
当前计算器仅支持基础四则运算和简单的 ±、%、√ 功能。用户希望扩展为完整的科学计算器,参考主流科学计算器(Windows 计算器 / Calculator.net / Casio fx-991)的标准功能集。
2. 设计原则
- 桌面端优先:科学函数仅修改 CalculatorDesktop,CalculatorMobile 保持现有基础布局
- 功能完整:覆盖三角/反三角/对数/幂/根/阶乘/记忆等完整科学计算功能
- 模式切换:顶部有基础/科学模式切换,保持原有 4 列布局宽度不变
- 错误安全:所有数学错误友好显示 "Error",不崩溃
3. 功能规格
3.1 三角函数
| 按键 |
函数 |
说明 |
| sin |
sin(x) |
正弦,支持DEG/RAD模式 |
| cos |
cos(x) |
余弦,支持DEG/RAD模式 |
| tan |
tan(x) |
正切,支持DEG/RAD模式 |
| sin⁻¹ |
asin(x) |
反正弦,2nd切换 |
| cos⁻¹ |
acos(x) |
反余弦,2nd切换 |
| tan⁻¹ |
atan(x) |
反正切,2nd切换 |
DEG/RAD 模式:
- 默认 DEG(角度制),按键切换
- 显示区域有 DEG/RAD 指示器
- 内部统一用 RAD 计算:RAD = DEG × π/180
3.2 对数与指数
| 按键 |
函数 |
说明 |
| log |
log₁₀(x) |
常用对数,x > 0 |
| ln |
ln(x) |
自然对数,x > 0 |
| x² |
x² |
平方 |
| x³ |
x³ |
立方 |
| xʸ |
x^y |
任意次幂(双目运算) |
| e^x |
eˣ |
指数函数(常数e为底的幂),2nd+ln 切换 |
3.3 根号
| 按键 |
函数 |
说明 |
| √ |
√x |
平方根,x ≥ 0 |
| ³√ |
³√x |
立方根 |
| x√y |
y√x |
N次方根(双目运算) |
3.4 其他数学函数
| 按键 |
函数 |
说明 |
| n! |
x! |
阶乘,非负整数;大数用 gamma 函数近似 |
| 1/x |
1/x |
倒数 |
| |x| |
abs(x) |
绝对值 |
| % |
x% |
百分比(除以100) |
| ± |
-x |
取反 |
| ( ) |
括号 |
改变运算优先级 |
3.5 常数
| 按键 |
值 |
说明 |
| π |
3.14159265358979 |
圆周率 |
| e |
2.71828182845905 |
自然常数 |
3.6 记忆功能
| 按键 |
功能 |
说明 |
| MC |
Memory Clear |
清除记忆(设为0) |
| MR |
Memory Recall |
读取记忆值到当前显示 |
| M+ |
Memory Add |
当前值加到记忆 |
| M− |
Memory Subtract |
当前值从记忆减去 |
状态指示:记忆值 ≠ 0 时,显示区有 "M" 标记。
3.7 角度模式切换
- 按键:DEG ↔ RAD(同一个按键切换)
- 影响:sin/cos/tan 的计算方式
- 显示:当前模式显示在 display 区域
3.8 反函数模式(2nd)
- 按键:2nd(切换键)
- 效果:sin→sin⁻¹, cos→cos⁻¹, tan→tan⁻¹, x²→x³, √→³√, xʸ→x√y
- 视觉:激活时按键背景变为 #6366f1,文字变白,表示反函数模式开启
4. UI 设计
4.1 布局(方案 B · 模式切换式)
- 宽度:保持 460px 不变
- 4列网格布局
- 顶部增加模式切换标签栏:基础 / 科学
- 基础模式:显示原有基础键盘
- 科学模式:在数字键上方显示科学函数区
4.2 模式切换标签栏
4.3 按键分类配色
| 类型 |
背景色 |
文字色 |
示例 |
| 数字键 |
#1e2538 |
#cbd5e1 |
0-9, . |
| 三角函数 |
rgba(99,102,241,0.12) |
#a5b4fc |
sin, cos, tan |
| 对数/指数 |
rgba(139,92,246,0.12) |
#c4b5fd |
log, ln, xʸ |
| 记忆功能 |
rgba(34,197,94,0.1) |
#86efac |
MC, MR, M+, M− |
| 运算符 |
rgba(14,165,233,0.1) |
#7dd3fc |
+, −, ×, ÷ |
| 等号 |
渐变(#6366f1, #8b5cf6) |
#fff |
= |
| 清除 |
#1e2538 |
#fca5a5 |
AC |
4.4 Display 区域扩展
5. 状态管理
5.1 状态转换
5.2 角度模式影响
6. 错误处理
| 错误场景 |
处理 |
| 负数开平方根 |
message.error + 显示 "Error" |
| log(0) 或 log(负数) |
显示 "Error" |
| tan(90°) 等无定义点 |
显示 "Error" |
| 除以零 |
显示 "Error" |
| 阶乘(负数/非整数过大) |
gamma 近似或显示 "Error" |
| 数值溢出 |
使用 toExponential(8) 显示 |
7. 文件变更
7.1 修改文件
src/pages/Calculator/Calculator.tsx:扩展 CalculatorDesktop 组件
src/pages/Calculator/Calculator.css:新增科学函数按键样式、扩展布局
7.2 不修改
src/pages/Calculator/CalculatorMobile.tsx:保持现有基础布局
- 其他组件
8. 实现顺序
- 新增模式切换标签栏组件和样式
- 状态扩展:添加 mode, memory, angleMode, invMode, parenOpen
- 单目函数:sin/cos/tan/log/ln/x²/x³/√/n!/1/x/±/%
- 双目函数:xʸ/x√y(需要特殊处理运算顺序)
- 常数:π/e
- 记忆功能:MC/MR/M+/M−
- 角度模式:DEG/RAD 切换 + 指示器
- 反函数:2nd 切换 + 按键文字变化
- 括号:( ) 支持
- 显示扩展:状态栏(DEG/RAD, M)
9. 测试要点
- 基础四则运算回归测试
- 三角函数在 DEG/RAD 模式下的正确性
- 连续运算(如 sin(30) + cos(60))
- 错误输入处理
- 记忆功能正确性
- 状态显示同步
- 模式切换正确性