按下 20 然后 %,显示屏显示 0.2。现在按 100,接着 +,再按 10,然后 % — 计算器并没有显示 10.1。它显示的是 110。同一个键,结果却完全不同。百分号键 是计算器上最依赖上下文的按钮之一,一旦你理解了它承担的两种功能,这种混淆就完全可以预见。
功能一:独立百分比
当 % 是唯一的操作符 — 当前表达式中没有加、减、乘、除等运算符在它之前 — 它表示一件事:除以100。输入 20%,计算器返回 0.2。输入 75%,返回 0.75。这是大多数人最先学会的用法,也是单独使用时最符合数学逻辑的版本。
在上面计算器的源码中,这种情况通过将出现在表达式开头(或左括号后)的任何 number% 替换为 (number / 100) 来处理。因此 20% 的结果字面上就是 20 / 100 = 0.2。这里没有任何歧义。
功能二:运行和的百分比
这正是让人感到意外的地方。当 % 出现在已经包含运算符(+、−、× 或 ÷)的表达式末尾时,计算器会做不同的处理:它计算最后一个运算符左侧子表达式的百分比,然后将该值作为第二个操作数。
举个具体例子。输入 100 + 10% 并按等号:
- 计算器识别到
%以运算符结尾。 - 它计算最后一个
+左侧的部分,即100。 - 计算该值的
10%:100 × 10 / 100 = 10。 - 用该结果替代,得到
100 + 10 = 110。
这就是基数百分比的行为,正是你在日常任务中如加销售税或打折时所需要的。要给45美元商品加8%税,输入 45 + 8% 并按等号:结果是 48.6,而不是 45.08。如果没有这种行为,你就得先算出45的8%,再加上去。

为什么行为会随运算符上下文变化
这是有意设计,而非偶然。正如 Raymond Chen 在一篇广为引用的 Windows 计算器文章中解释的,百分号键是为日常购物者设计的,而非工程师。目标是让用户只需按一个键就能回答“X加上X的Y百分比是多少?”的问题,无需理解百分比代数。数学形式不那么直观,但实用形式立刻有用。
同样的逻辑适用于减法。输入 200 − 15%,计算器返回 170 — 它先计算了 15% of 200 = 30,然后减去它:200 − 30 = 170。这就是对200美元价格打15%折扣。大多数人在这种情况下按百分号键,是在计算折扣,而不是单纯求0.15。
链式运算符时的表现
这种行为也适用于更长的表达式。考虑 10 + 10 + 10%。计算器先计算最后一个运算符前的部分:10 + 10 = 20。然后计算 10% 的 20,结果是 2。最终结果是 20 + 2 = 22。
这在上面工具的源码中也得到直接验证:百分号处理器使用贪婪正则表达式找到最后一个运算符之前的所有内容,递归计算该子表达式,然后乘以百分比值除以100。百分比总是相对于该最后运算符处的运行总和计算的。
何时使用百分号键,何时输入小数
百分号键是一个带有特定含义的快捷键。它适合以下任务:
- 加税或费用 —
price + rate%自动计算价格上的税费。 - 应用折扣 —
price − rate%扣除正确金额。 - 快速求某值的分数 —
500 × 20%得到100(500的20%)。
它不太适合以下任务:
- 单独将百分比转换为小数 —
20%得到0.2,这是正确的,但如果随后继续输入运算符,语境会发生变化。 - 复杂表达式中“基数”不是最后运算符左侧子表达式 — 如果你想求百分比的数字不紧挨着最后一个运算符,快捷键会计算错误的基数。这种情况下,建议单独计算百分比,再手动加上结果。
试试吧:在上面的计算器中输入100 + 10%并按等号。结果是110 — 不是100.1。然后单独输入10%:结果是0.1。同一个键,两个不同结果,完全由前面的内容决定。