使用方法
- 先填比例项 a 与比例项 b,两个都必须是 1~1000000 的整数。示例是
3和4,打开页面即是这个值。 - 选求解方式。默认「按比分配」还需要填总量 T(示例 350);「解第四项」改用已知第三项 c(示例 12);「只化简」只用 a、b 两项。
- 在按比分配模式里,工具先算每份
T ÷ (a + b),再算T × a ÷ (a + b)与T × b ÷ (a + b),最后把两份相加和总量对一次,差值就是尾差。 - 在解第四项模式里,工具按交叉相乘
a × d = b × c求d = b × c ÷ a,并把a × d与b × c两个乘积都打出来互验。示例4 × 12 ÷ 3 = 16,两个乘积都是 48。 - 在任一输入框按 Enter 或点「开始计算」重算;「复制结果」带走纯文本,「载入示例」把四个字段还原成 3 / 4 / 350 / 12。
这个比例计算器能解决什么问题
一是把「比例」从口算变成可复核的整数。口算里的「三七开」「二八分成」说的是最简整数比,一旦掺进小数就很难心算验证。这个比例计算器先用辗转相除法求出最大公约数,把 12:16 拉回 3:4,再给出 a/b 与 b/a 两个方向的小数值,方便和资料上的数字对上。
二是按比分配时不让两份之和丢掉总量。分成两份最容易出的错是四舍五入的尾差:总量 1 按 1:7 分,两份各保留两位小数会得到 0.13 + 0.88 = 1.01,凭空多出 0.01。工具把尾差单独列成一项指标,财务对账时能立刻看出该往哪一份上补。
三是解未知项时给出可对照的两个乘积。比例题写顺了就是 a:b = c:d,但实战里常常是「已知三个求第四个」。工具不只给答案,还把 a × d 和 b × c 并排打出来,两个数相等才算通过——这是自查,比重算一遍快。
四是识别「比例」和「百分比」的混淆。示例里 3:4 的第一份占总量 350 的 42.86%,不是 75%——75% 是 3/4,那是「甲是乙的 0.75 倍」,两回事。需要把任意数值换算成百分数时,请用「百分比计算器」;需要「先打折再涨价」这类复合百分比变化时,用「百分比变化计算器」;本页只处理整数比的化简、分配与交叉求解。
原理与规则说明:gcd 约分、交叉相乘与分配的单点舍入
约分靠欧几里得辗转相除法。代码里的 gcd(a, b) 反复执行 a % b 与 a = b; b = 余数,直到余数为 0,此时的 b 就是最大公约数。它不依赖浮点,因此对任意大小的整数都精确——这是本页敢把整数上限定在 1000000 的原因:1000000 × 1000000 = 1012 仍小于 253,中间乘积不会掉精度。示例里 gcd(3, 4) = 1,所以 3:4 本身已最简;换成 12:16 时 gcd(12, 16) = 4,同除 4 得回 3:4。
比值换算保留四位小数,用的是 toFixed(4)。取四位而不是两位,是因为比例值常被写进技术文档和配比表,0.5714(即 4/7)比 0.57 更接近真值;toFixed 内部做的是就近舍入,与 Math.round 在 0.125 这类正好卡在中间的数上可能差一个末位,这是 ECMAScript 规定的行为,不是误差。
分配是「先算单份,再乘项数」,不是「总量乘比值」。公式是 甲 = T × a ÷ (a + b)。示例 350 × 3 ÷ 7 = 150。如果误写成 T × a ÷ b = 350 × 3 ÷ 4 = 262.5,就相当于假设「总量里去掉乙的那份」——但 a/b 的分母 b 是乙的份数,不是总量份数,两者只在 a + b = b(即 a = 0)时才偶然相等。示例里这个误用会让甲多出 112.50。
交叉相乘是比例的基本性质。a/b = c/d 等价于 a × d = b × c,解出 d = b × c ÷ a。这一步不做任何近似,是整数比例的精确运算;只有当 b × c 不能被 a 整除时,结果才是小数,此时工具会照实输出小数并同时给出两个乘积供你判断。
尾差是被测量出来的,不是被消灭的。工具对两份各自 toFixed(2),然后把 甲 + 乙 与总量各自保留两位后相减,差值即尾差,取值范围在 -0.01 到 +0.01 之间。示例 3:4 分 350 时两份都能整除到尾,尾差 0.00;换成 1:7 分 1 就会看到 +0.01。工具不擅自把尾差塞进某一份,因为「谁多收 1 分」是业务决定,不是数学决定。
完整示例(数值仅作演示)
示例条件与这个比例计算器打开页面时的默认值完全一致:a = 3、b = 4、总量 T = 350、已知第三项 c = 12、模式=按比分配。实测结果如下:
- 最大公约数 1,最简整数比
3:4,原式已最简; - a/b = 0.7500,b/a = 1.3333;
- 每份
350 ÷ 7 = 50.0000,甲 150.00,乙 200.00,合计 350.00,尾差 0.00; - 占比甲 42.86%、乙 57.14%,两者相加 100.00%;
- 切到「解第四项」模式:
d = 4 × 12 ÷ 3 = 16,a × d = 48与b × c = 48相等。
下面这段是示例在默认模式下的真实输出,可以直接拿去对照自己填的数:
最简整数比:3:4(gcd(3,4) = 1,原式已最简) 比值 a/b = 0.7500 b/a = 1.3333 总量 350 按 3:4 分配: 每份 = 350 ÷ (3+4) = 50.0000 甲 = 350 × 3 ÷ 7 = 150.00 乙 = 350 × 4 ÷ 7 = 200.00 合计 = 350.00(与总量一致) 占比 甲 42.86% 乙 57.14%
下表是 16 组常见比例在同一总量 350 下的对照结果,前 12 行默认显示,点「加载更多」展开后 4 行。表中数字由同一套 gcd 与 toFixed 逻辑算出:
| 原始比 | 最简整数比 | a/b | 放大 4 倍 | 350 的两份分配 | a 占比 |
|---|---|---|---|---|---|
| 1:1 | 1:1 | 1.0000 | 4:4 | 175.00 / 175.00 | 50.00% |
| 1:2 | 1:2 | 0.5000 | 4:8 | 116.67 / 233.33 | 33.33% |
| 1:4 | 1:4 | 0.2500 | 4:16 | 70.00 / 280.00 | 20.00% |
| 2:5 | 2:5 | 0.4000 | 8:20 | 100.00 / 250.00 | 28.57% |
| 3:4 | 3:4 | 0.7500 | 12:16 | 150.00 / 200.00 | 42.86% |
| 3:5 | 3:5 | 0.6000 | 12:20 | 131.25 / 218.75 | 37.50% |
| 4:7 | 4:7 | 0.5714 | 16:28 | 127.27 / 222.73 | 36.36% |
| 5:8 | 5:8 | 0.6250 | 20:32 | 134.62 / 215.38 | 38.46% |
| 9:16 | 9:16 | 0.5625 | 36:64 | 126.00 / 224.00 | 36.00% |
| 12:16 | 3:4 | 0.7500 | 48:64 | 150.00 / 200.00 | 42.86% |
| 15:25 | 3:5 | 0.6000 | 60:100 | 131.25 / 218.75 | 37.50% |
| 27:9 | 3:1 | 3.0000 | 108:36 | 262.50 / 87.50 | 75.00% |
| 7:3 | 7:3 | 2.3333 | 28:12 | 245.00 / 105.00 | 70.00% |
| 5:12 | 5:12 | 0.4167 | 20:48 | 102.94 / 247.06 | 29.41% |
| 8:15 | 8:15 | 0.5333 | 32:60 | 121.74 / 228.26 | 34.78% |
| 100:75 | 4:3 | 1.3333 | 400:300 | 200.00 / 150.00 | 57.14% |
输入范围与对照表
四个输入框的范围与超限动作如下,右列是填错时会看到的具体提示:
| 字段 | 允许范围 | 超限或填错时的动作 |
|---|---|---|
| 比例项 a | 整数 1~1000000,必填 | 拒绝计算,提示 a 允许 1~1000000 的整数 |
| 比例项 b | 整数 1~1000000,必填 | 同上,b 不得为 0 |
| 总量 T | 整数 0~100000000,仅按比分配读 | 拒绝计算;上限 1e8 是为了让 T × a 不超过 253 |
| 已知第三项 c | 整数 1~1000000,仅解未知项读 | 拒绝计算并指明该字段 |
| 含小数点 | 一律拒绝 | 提示比例项与总量按整数口径处理 |
| 含 U+2212 减号 | 一律拒绝 | 提示这是数学减号,请改半角 - 或填正整数 |
| 全角数字与千分位 | 自动归一:1,234 → 1234 | 不报错,但会提示已归一 |
边界与舍入说明
- 整数项不许填小数。比例项写成
2.5会被直接拒绝而不是悄悄取整——「2.5:7」要么写成5:14,要么说明是另一个量纲,擅自取整会把误差固化进后续所有计算。 - a 与 b 都不得为 0。含 0 的比(如
0:5)在数学上成立,但b/a会除零、分配也会失去意义,所以工具直接拒绝并要求改成有意义的正整数比。 - 整数上限 1000000 是精度边界,不是随便定的。ECMAScript 的安全整数上限是
Number.MAX_SAFE_INTEGER = 9007199254740991(即253 − 1)。交叉相乘要算b × c,两项各 1e6 时乘积1012安全;若把上限放宽到 1e9,乘积1018就已超过 253,第 17 位起会被静默抹掉。 - T 上限 100000000 是另一个约束。
T × a最大1014,同样在安全区内。总量再放大就必须改用 BigInt 或字符串化的大数运算,本页不做那套处理。 - 尾差范围是 −0.01 ~ +0.01。两份各自保留两位小数,与总量保留两位后相比,最大偏离就是一个末位单位。示例
1:1分 1 或分 350 都不会产生尾差,因为a = b时每份正好是T/2;1:7分 1 则出现+0.01。 - 占比保留两位,两份相加可能不是精确 100.00%。示例
3:4的 42.86% 加 57.14% 正好 100.00%,但1:2这类在toFixed(2)下也可能凑出 99.99% 或 100.01%,这是显示精度而非计算错误。 - 不做单位换算,也不解析带单位的输入。
3kg:4kg会被拒绝,因为比例项必须是纯数字。需要带单位的量先自行换成同一单位再进来。 - 放大倍数固定为 4,仅出现在对照表里用于观察「同比缩放」;工具本身不做「放大到 N 倍并保证整数」的功能,那类需求用整数乘法更直接。
常见问题
3:4 分 350,为什么第一份是 150 而不是 262.5?
因为 3/4 表示「甲是乙的 0.75 倍」,不表示「甲占总量的四分之三」。按比分配的分母是总份数 a + b = 7,所以甲是 350 × 3 ÷ 7 = 150。写成 350 × 3 ÷ 4 等于假设总量里先扣掉乙的份数,凭空多出 112.50。真要表达「占总量四分之三」,那是另一类计算,请用百分比相关的工具。
最大公约数会不会算错?整数很大时还能用吗?
不会。辗转相除法全程用 % 取余,是整数运算,不存在浮点误差。真正的限制来自 JavaScript 的安全整数上限 253 − 1 = 9007199254740991:本页把两项各限在 1e6,交叉乘积最大 1012,留了很大余量。若要处理几百位的整数比,浏览器里要用 BigInt 手动实现,本页不做。
结果里那个「尾差」是什么,要不要处理?
它是两份各自保留两位小数后相加,与总量保留两位后的差,范围 −0.01 ~ +0.01。示例 3:4 分 350 尾差 0.00;1:7 分 1 时 0.13 + 0.88 = 1.01,尾差 +0.01。工具故意不自动修正,因为「多出的 1 分算谁的」是业务规则(通常归给份数大的一方,或直接抹掉),不是数学问题。
为什么 b/a 和 a/b 都要给?
因为「甲是乙的几倍」和「乙是甲的几倍」是两个不同的问题,资料里的说法也常混。示例 3:4 下 a/b = 0.7500、b/a = 1.3333,写成「4/3 倍」或「0.75 倍」都对,但含义相反,抄进文档时务必确认方向。
「解第四项」算出来是小数,说明我输错了吗?
不一定。d = b × c ÷ a 是精确式,只要 b × c 能被 a 整除,结果就是整数。示例 4 × 12 ÷ 3 = 16 整除;若填 a = 7、b = 1、c = 1,得 d = 0.142857…,此时 a × d = 1 与 b × c = 1 仍然相等,说明输入本身自洽,只是这个比例在整数上不整除。工具会把两个乘积都打出来供你判断。
我把 12:16 填进去,为什么和 3:4 的结果一样?
因为 gcd(12, 16) = 4,同除 4 后就是 3:4。这正是「最简整数比」的意义:同一个比例可以有无数种写法,约分后只剩唯一一种。对照表里 12:16 与 3:4、15:25 与 3:5、100:75 与 4:3 都是同一组结果,可以对照着看。
为什么比例项不让我填小数或带单位?
两个原因。一是工具内部靠整数取余做 gcd,小数会直接打断这个前提;与其悄悄取整,不如明确拒绝。二是带单位的输入(「3kg:4kg」)存在量纲歧义,工具无法判断你到底想约掉单位还是换算数值。遇到这类数据,先自行统一单位再填纯数字。
这个比例计算器和百分比计算器、增长率计算器怎么分工?
分工在数据形态上:这三个兄弟页处理的都是百分数——把 0.35 写成 35%、算涨了百分之几、打几折。本页处理的是整数比——把 3:4 约简、分配、求未知项。整数比不能被百分比完全替代,因为约分需要 gcd,而百分数是已经归一化到底数 100 的结果。