计算器(表达式 · 括号 · 百分号 · 幂与开方)
整行输入算式再出结果,支持括号、乘除、次方、开方、对数、三角函数和百分号(能算“120 加 15% 等于 138”这类题)。键盘直接敲,也可以点下面的按键。全部在你本机解析计算。
Enter 出结果;括号、减号都可以直接敲键盘。
—
结果
—
科学计数法
五组算好的式子
| 输入 | 结果 | 科学计数法 | 按哪条规则 |
|---|---|---|---|
| 120+15% | 138 | 1.38 × 10^2 | + 号的百分数按左边的数来取 |
| 2^10 | 1,024 | 1.024 × 10^3 | ^ 是乘方,结果按千位分组 |
| sqrt(3^2+4^2) | 5 | 5 × 10^0 | 函数名后面要跟一对括号 |
| 2 3 | 6 | 6 × 10^0 | 两个数之间的空格是乘号,不是 23 |
| 0.1+0.2 | 0.3 | 3 × 10^−1 | 浮点尾巴按 12 位有效数字清掉 |
文法、弧度与精度
支持哪些写法
| 类别 | 写法 | 说明 |
|---|---|---|
| 四则与括号 | + - * / ( ),× ÷ 也可以直接输入 |
标准优先级,括号随意嵌套 |
| 幂与开方 | 2^10、sqrt(2)、cbrt(27) |
^ 右结合,2^3^2 是 2^9 |
| 百分号 | 50%、120+15% |
见下一节,两种含义 |
| 函数 | abs floor ceil round ln log10 log2 exp sin cos tan asin acos atan |
log10( 是一个整体,不会被拆开 |
| 常量 | pi、e |
也可写作 2pi,省略的乘号会自动补上 |
| 科学计数 | 1.5e3、2e-4 |
等价于 1500 与 0.0002 |
| 千分位逗号 | 1,000+1 |
逗号只在「前面有数字、后面正好三位」时当分组符;3,4 这类会直接报错,不会悄悄当成 34 |
| 空格 | 1 + 2 3 |
空格是运算边界,2 3 读作 2×3 = 6,所以结果是 7,不会拼成 23 |
百分号有两种含义,这里都支持
50% 就是 50 ÷ 100 = 0.5。但当百分号紧跟在加号或减号后面时,它按左边那个值取百分比——这是纸质计算器和手机计算器的行为:
120+15%→ 120 + 120×15% = 138(涨了 15%)120-15%→ 102(打了 85 折)120+15%+10%→ 前一步结果 138,再加 138×10% = 151.8(连续涨价按复利滚动,符合直觉)120*15%→ 120 × 0.15 = 18,此时百分号退回普通含义
需要更严谨的口径时,直接把 120*1.15 写出来,可读性也更好。
三角函数用弧度
sin(pi/2) = 1。角度制请自己换算:sin(45*pi/180)。之所以不做角度开关,是因为同一行里混用两种单位更容易出错。
精度说明
结果按 12 位有效数字 显示。这一步主要用来消掉 0.1+0.2 得到 0.30000000000000004 这类二进制浮点的尾巴——它不是这套实现的问题,是 JavaScript 使用 IEEE 754 双精度数的必然结果,绝大多数语言都如此。
所以:
- 需要分毫不差的金额累加、精确小数运算,请换用十进制精确库或表格软件;
- 需要 15 位以上有效数字的科学计算,这里也会被截到 12 位;
- 溢出(比如
10^400)会直接报「超出可显示范围」而不是给出Infinity。
输入的内容去哪了
页面里没有 eval:算式先按上面的文法切成 token,再由递归下降解析成表达式树,最后求值。全程在你自己的浏览器里跑完,算式本身不进请求体,输入的算式不会离开这台设备。