计算与换算速查表
百分比、复利、统计、单位换算……这些计算看似简单,踩坑却很集中:基数变了、口径错了、单位混了。本页按「用途 / 场景 / 常见坑」梳理 6 类常用计算,并给出温度三标度的关键锚点对照。
原理解析
数值计算要区分「数学精确」与「计算机表示」。浮点数(IEEE 754 双精度)用二进制近似十进制,故 0.1 + 0.2 ≠ 0.3,金额等场景须用整数分或十进制库避免误差累积。
进制转换(二/八/十/十六)本质是「按权展开与取余」;单位换算注意量纲(1 KiB = 1024 B 而 1 KB = 1000 B 的 IEC/SI 之争)。运算符优先级与括号会显著改变结果,表达式解析需明确顺序。
什么时候该查这张表
这张表在你要做数值计算、统计分析或单位换算时有用。它列出百分比、增长率、离散程度、抽样与估计等常见计算各自做什么、典型场景与常见坑。选计算方法前先明确问题类型。
不该查的情况:你在做符号计算、矩阵运算或数值分析算法的选择。本表覆盖的是日常数据分析里最常用的一批统计量与换算,不含算法复杂度与数值稳定性问题。
判断标准:先分清描述统计与推断统计。前者在描述已有数据(均值、中位数、方差),后者在从样本推断总体(置信区间、假设检验)。选错会导致结论过度解读 —— 对 30 个用户算出的「95% 置信区间」在统计学上几乎没有意义。
特别注意平均数的代表性:均值对极端值敏感,分布偏斜时中位数与分位数更稳健。举例:统计站内工具的用户评分,均值 4.2 可能掩盖了「70% 的人打 2 分、30% 的人打 5 分」这种双峰分布,此时中位数 2 才有意义。
边界与常见陷阱
平均数在偏斜分布里会给出误导性的结论
把「人均收入」「平均响应时间」「平均停留时长」直接当典型值汇报,会被少数极端值拉高。判断方法很直接:看中位数与均值差多少 —— 差值大说明分布偏斜,此时应报告中位数与四分位数;差值小则均值可用。真实案例:平均停留 8 分钟但中位数 40 秒,说明有少数任务停留很久而多数人秒退,用均值汇报会掩盖这个核心结论。
增长率要指明基期,「增长 10 倍」的歧义经常被忽略
「从 100 涨到 200」可以说「增长 100%」也可以说「增长到 2 倍」;「增长 10 倍」在中英文语境下分别指「变成 11 倍」和「变成 10 倍」。统计与增长指标的标准做法是用倍数(2x)而非「倍数增长」(增长 2 倍),并在同比/环比之外始终写明基期。跨期对比时还要注意周期长度是否一致(7 日与 30 日不能直接比)。
小样本上的百分比会误导决策
「10 个用户里 3 个流失,流失率 30%」听起来很严重,但 95% 置信区间大约是 11%–60% —— 真实值可能低到 11%。在样本量小于 100 时,百分比的不确定性远大于数值本身。实践建议:内部决策看绝对数量并标注样本量,对外沟通用区间而不是点估计;转化率这类指标建议用「至少 N 次曝光下的转化率」这种带分母的表述。
与相邻内容的分工
要实际计算这些统计量,用站内计算器类工具;本页是方法选型对照。
要设计 A/B 实验与统计检验流程,属实验方法论范畴,需要先定指标与样本量。
要处理时间序列的预测与建模,属统计分析进阶内容,本表不覆盖。
若目的是解释某个具体数字的含义,先确认它的基期、样本量与分布形状,再下结论。
实战片段
要点:① 均值对极端值敏感,偏斜分布里中位数与四分位数才是诚实汇报 —— 判断方法是看均值与中位数的差距,差距大就报告中位数;② 增长必须写明基期,用倍数(2x)而非「增长 2 倍」,且同比环比要保证周期长度一致(7 日与 30 日不能直接比);③ 小样本(n < 100)上的百分比不确定性远大于数值本身,30% 可能实际是 11%–60%,应给区间而非点估计;④ 描述统计与推断统计要分清,对 30 个用户算 95% 置信区间在统计学上几乎没有意义。
// ① 描述统计:偏斜分布用中位数,均值会被极端值拉高
function describe(values) {
const sorted = [...values].sort((a, b) => a - b)
const sum = values.reduce((a, b) => a + b, 0)
const mean = sum / values.length
const median = sorted.length % 2
? sorted[(sorted.length - 1) / 2]
: (sorted[sorted.length / 2 - 1] + sorted[sorted.length / 2]) / 2
// 均值与中位数的差距大 ⇒ 分布偏斜 ⇒ 以中位数汇报
const skewed = Math.abs(mean - median) > Math.abs(median) * 0.1
return { mean, median, skewed, reported: skewed ? median : mean }
}
console.log(describe([2, 2, 2, 2, 2, 2, 2, 2, 2, 40])) // skewed: true
// ② 增长:写清基期,用倍数而非「倍增长」
function growth(from, to) {
return {
from, to,
multiple: (to / from).toFixed(2) + 'x', // 2.00x
percentChange: (((to - from) / from) * 100).toFixed(1) + '%',
}
}
console.log(growth(100, 200)) // { multiple: '2.00x', percentChange: '100.0%' }
// ③ 小样本百分比:给区间而不是点估计(Wilson 区间近似)
function wilson(successes, n, z = 1.96) {
const p = successes / n
const d = 1 + z * z / n
const c = (p + z * z / (2 * n)) / d
const m = z * Math.sqrt((p * (1 - p) + z * z / (4 * n)) / n) / d
return { low: (c - m), high: (c + m) }
}
const ci = wilson(3, 10)
console.log('3/10 的 95% 区间:', ci.low.toFixed(3), '~', ci.high.toFixed(3))
// 0.112 ~ 0.603 ⇒ 点估计 30% 的不确定性极大
// ④ 同比与环比要保证周期长度一致
function compare(current, previous) {
return {
percentChange: (((current - previous) / previous) * 100).toFixed(1) + '%',
// 🔴 7 日与 30 日不可直接比,必须先归一化
normalizedDaily: current / 7,
}
}
// ⑤ 离散程度:标准差 vs 四分位距
function spread(values) {
const sorted = [...values].sort((a, b) => a - b)
const q = p => sorted[Math.floor(p * (sorted.length - 1))]
const iqr = q(0.75) - q(0.25)
const mean = values.reduce((a, b) => a + b, 0) / values.length
const sd = Math.sqrt(values.reduce((a, b) => a + (b - mean) ** 2, 0) / values.length)
return { sd: sd.toFixed(2), iqr, preferIQR: iqr > sd } // 偏态分布用 IQR实践注解
- 二进制浮点算不了 0.1 + 0.2IEEE 754 双精度下 0.1 与 0.2 都不能精确表示,相加得到 0.30000000000000004。金额、库存等场景必须用整数(最小单位)或十进制类型,比较时也应约定误差容限而不是直接用 ===。
- 百分比变化的分母选择会得到完全不同结论从 100 降到 80 是下降 20%(分母取原值),但若要恢复到 100 需要上涨 25%(分母取现值)。运营报表里「涨跌幅」必须写清分母口径,否则同一组数据能得出两种对立的叙事。
- 温度换算不是比例换算,不能只乘系数摄氏转华氏的公式是 x * 9/5 + 32,存在偏移量,因此 20℃ 不是 10℃ 的两倍。凡涉及「零点不为零」的量(温度、海拔、年份),做同比或倍数比较前必须先想清楚基准。
数据来源
- IEEE 754-2019 (floating-point arithmetic)
- Standard mathematical and statistical definitions
上述编号、名称与定义均来自公开规范,本站不主张对规范数据本身的独创性;本页的编排方式、中文释义与实践注解由本站撰写。
6 类常用计算对照
| 计算 | 做什么 | 典型场景 | 常见坑 |
|---|---|---|---|
| 百分比 | 求占比、增减幅、原价与折后价 | 折扣计算、增长幅度、完成率 | 涨 50% 再降 50% 回不到原价,基数已变 |
| 表达式求值 | 直接计算带括号与函数的算式 | 快速验算、批量套公式 | 注意运算符优先级与角度弧度单位 |
| 统计量 | 算均值、中位数、众数、方差与标准差 | 看数据集中趋势与离散程度 | 均值受极端值拉动,偏态分布看中位数 |
| 复利 | 按计息周期利滚利,可含定期追加投入 | 存款、贷款、定投收益测算 | 名义年利率不等于实际年化,要看计息次数 |
| 单位换算 | 长度、重量、面积、体积、速度等互换 | 跨境文档、工程图纸、食谱 | 美制与英制加仑、盎司不同,先确认体系 |
| 温度换算 | 摄氏度、华氏度、开尔文互换 | 烤箱温度、天气预报、实验记录 | 温度是区间量,不能当比例量直接乘除 |
温度三标度锚点对照
换算公式:℉ = ℃ × 9/5 + 32,K = ℃ + 273.15。下表是几个便于记忆的锚点。
| 场景 | 摄氏度 ℃ | 华氏度 ℉ | 开尔文 K |
|---|---|---|---|
| 绝对零度 | -273.15 | -459.67 | 0 |
| 水的冰点 | 0 | 32 | 273.15 |
| 室温 | 20 | 68 | 293.15 |
| 人体体温 | 37 | 98.6 | 310.15 |
| 水的沸点 | 100 | 212 | 373.15 |
| 烤箱中温 | 180 | 356 | 453.15 |
常见问题
先涨 50% 再降 50%,为什么不是回到原价?
因为两次计算的基数不同。假设原价 100,涨 50% 后变成 150;再降 50% 是降 150 的一半,即降 75,结果是 75,比原价少了 25。涨跌百分点相同但方向相反时,最终结果总是低于起点,差距等于变化幅度的平方(这里是 0.5 × 0.5 = 0.25,即损失 25%)。反过来先降后涨也是同样的亏损。
平均值、中位数、众数该选哪个?
看数据分布形态。数据大致对称、没有极端值时用平均值,它用到了每个数据点的信息。数据有极端值或明显偏斜时(典型如收入、房价、响应时间)用中位数,它不受极端值影响,更能代表「典型水平」。众数适合类别数据或需要知道「最常见的是哪个」的场景,比如最畅销的尺码。一个实用习惯:报告平均值时同时给出中位数,读者能立刻判断数据是否偏斜。
名义年利率和实际年化收益为什么不一样?
差别来自计息次数。名义年利率 12% 按月计息,实际每月利率是 1%,一年后变成 1.01 的 12 次方,约等于 1.1268,实际年化是 12.68% 而不是 12%。计息越频繁,实际年化越高;连续计息时会趋近于 e 的 r 次方减一。比较不同产品时一定要用实际年化口径,只看名义利率会被误导。
摄氏度换算华氏度,为什么还要加 32?
因为两个温标的零点不同,而且每一度的大小也不一样。摄氏把水的冰点定为 0、沸点定为 100,中间 100 等份;华氏把冰点定为 32、沸点定为 212,中间 180 等份。所以华氏一度只有摄氏一度的 100/180 即 5/9,换算时要先乘 9/5 改变量程,再加 32 对齐零点:℉ = ℃ × 9/5 + 32。开尔文则是把零点下移到绝对零度,刻度大小与摄氏一致,所以只需减 273.15。