rea.run

← 实验室 · English

实验室 · 原生对照

重建计算器的 % 键 —— 试玩两条规则

为何 200 + 10% 得到 220,而 200 × 10% 得到 20?百分号依赖运算符。Microsoft 公开了 Calculator 源码,可用具名符号裁决 REA 发现。本页在 rea.run 托管运维向双规则试玩。

遇到 +
取第一个数的 10%。
200 的 10% = 20 → 200 + 20 = 220
遇到 ×
把 10% 变成 0.1。
200 × 0.1 = 20
200 + 10

按 % 看 10 会变成什么。

交互示意:依赖运算符的百分号规则(对照 Microsoft Calculator 公开源码中的 IDC_PERCENT 分支)。非 Windows 计算器应用克隆。

可读规则(教学摘要)

if (operation == multiply || operation == divide) {
  percent = current / 100;
} else {
  percent = current * previous / 100;
}

当 previous = 200、current = 10:加法路径得到 20 再得 220;乘法路径得到 0.1 再得 20。

开源裁决

项值/链接
公开树 microsoft/calculator(MIT)
处理函数(钉住的提交) scifunc.cpp · IDC_PERCENT
单元测试(钉住) CalculatorManagerTest.cpp
命令 ID IDC_MUL 92 (0x5c)、IDC_DIV 91 (0x5b)、IDC_PERCENT 118 (0x76);常数 0x64 = 100
case IDC_PERCENT:
{
  // 乘/除 → X [op] (Y%)
  // 其他 → X [op] (X * Y%)
  if (m_nOpCode == IDC_MUL || m_nOpCode == IDC_DIV)
    result = rat / 100;
  else
    result = rat * (m_lastVal / 100);
  break;
}

可核对试玩矩阵

表达式期望 %期望结果本页操作
200 + 10%20220选 +,按 %,按 =
200 × 10%0.120选 ×,按 %,按 =

运维步骤

  1. 先读案例墙短摘要:/zh/showcase/windows-calculator-percent/。
  2. 打开上方钉住的 scifunc.cpp 与测试;在信任截图前先点名分支。
  3. 若用 REA 检查已安装 Calculator 二进制,请把 Evidence 与公开源码并排。
  4. 只重建你可控的教学演示——不是教你去改无权修改的系统组件。
用 REA 检查 Windows 计算器的 % 键。
还原 + 与 × 之后的规则,然后做一个同时使用两条规则的小计算器。

教学披露

  • 本小部件是百分号规则的交互示意——不是 Windows 计算器界面。
  • 主张冲突时,优先以 Microsoft 公开 MIT 树为裁决层。
  • 仅授权/教育/互操作研究。见 /zh/compliance/ 与 /zh/faq/legal-boundary/。

相关

资源链接
实验室枢纽/zh/lab/
恐龙速度实验室/zh/lab/dino-speed/
案例墙摘要/zh/showcase/windows-calculator-percent/
DX-Ball Evidence/zh/showcase/dx-ball/
英文孪生/lab/calculator-percent/