比例计算器

把 a:b 约成最简整数比、交叉相乘解出未知项,或把一个总量按比例分成两份——每一步的中间量都摆在页面上。

最大公约数1
最简整数比3:4
a/b0.7500
b/a1.3333
每份50.0000
尾差0.00
最简整数比: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%

提示:四个输入框里按 Enter 直接重算;单行输入不需要组合键。下面这份就是默认示例(3:4、总量 350)的真实输出。

使用方法

  1. 先填比例项 a 与比例项 b,两个都必须是 1~1000000 的整数。示例是 3 和 4,打开页面即是这个值。
  2. 选求解方式。默认「按比分配」还需要填总量 T(示例 350);「解第四项」改用已知第三项 c(示例 12);「只化简」只用 a、b 两项。
  3. 在按比分配模式里,工具先算每份 T ÷ (a + b),再算 T × a ÷ (a + b) 与 T × b ÷ (a + b),最后把两份相加和总量对一次,差值就是尾差。
  4. 在解第四项模式里,工具按交叉相乘 a × d = b × c 求 d = b × c ÷ a,并把 a × d 与 b × c 两个乘积都打出来互验。示例 4 × 12 ÷ 3 = 16,两个乘积都是 48。
  5. 在任一输入框按 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、模式=按比分配。实测结果如下:

下面这段是示例在默认模式下的真实输出,可以直接拿去对照自己填的数:

最简整数比: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:11:11.00004:4175.00 / 175.0050.00%
1:21:20.50004:8116.67 / 233.3333.33%
1:41:40.25004:1670.00 / 280.0020.00%
2:52:50.40008:20100.00 / 250.0028.57%
3:43:40.750012:16150.00 / 200.0042.86%
3:53:50.600012:20131.25 / 218.7537.50%
4:74:70.571416:28127.27 / 222.7336.36%
5:85:80.625020:32134.62 / 215.3838.46%
9:169:160.562536:64126.00 / 224.0036.00%
12:163:40.750048:64150.00 / 200.0042.86%
15:253:50.600060:100131.25 / 218.7537.50%
27:93:13.0000108:36262.50 / 87.5075.00%

输入范围与对照表

四个输入框的范围与超限动作如下,右列是填错时会看到的具体提示:

字段允许范围超限或填错时的动作
比例项 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不报错,但会提示已归一

边界与舍入说明

常见问题

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 的结果。

相关工具