使用方法
- 在「广告花费(元)」里填这一轮投放实际花掉的钱,示例填 1500。
- 在「曝光次数(次)」里填广告被计入展示的总次数,示例填 500000(50 万次)。
- 点「计算」,或在任意输入框里按 Enter,上方立刻给出千次展示成本(示例结果为 3.00 元/千次)与单次曝光成本(示例为 0.003 元)。
- 想知道「再投 200 万次要多少钱」,就在「目标曝光」填 2000000,结果区会给出按当前 CPM 折算的预算(示例为 6000.00 元)。
- 想知道「6000 元能买多少曝光」,就在「可用预算」填 6000、「目标 CPM」填 3,结果区给出可买曝光(示例为 2,000,000 次)。
这个千次展示成本计算器能解决什么问题
投完一轮广告,后台给的是「花了多少钱」和「展示了多少次」两个原始数字,但媒体报价单、行业 Benchmark、代理公司的结算口径全都用「每千次多少钱」说话,两者对不上就很难判断这轮买贵了还是买便宜了。这个千次展示成本计算器主要处理四类情况:一是把一轮投放的花费和曝光换算成千次展示成本,拿去和媒体报价单或行业基准直接比对;二是在 CPM 固定的前提下反推预算——先定要触达多少人次,再倒推该准备多少钱;三是在预算已经批下来的情况下反推能买到多少曝光,判断这个量级够不够铺完计划;四是把 CPM 和点击率、可见率放到同一个算式中,折算成单次点击成本和每千次可见展示成本,看真实的触达单价。
本页只做「曝光维度」的折算。如果你要算的是按点击付费的单次点击价格、按转化付费的单次行动成本、或者整轮投放的广告回报倍数,本页不直接给出,用页面底部列出的专门计算器更合适。
原理与规则说明
核心公式只有一条:CPM = 花费 / 曝光 × 1000,与页面数据源里登记的表达式 c/i*1000 完全一致。它不涉及任何迭代或拟合,是一次除法加一次乘法,所以不存在收敛误差,唯一的误差来源是浮点表示本身。
中间量是单次曝光成本:花费 / 曝光 先得到「一次展示值多少钱」,再乘 1000 抬到千次口径。本页把这两个数都显示出来,是因为单次曝光成本通常在 0.001 元这个量级,位数太多不便于口头沟通,而千次口径把小数点后移三位,正好落在 1~100 的易读区间。
为什么乘的是 1000 而不是 1024:CPM 的全称是 Cost Per Mille,其中的 Mille 来自拉丁语「一千」,是严格的十进制 1000,和存储容量里 1 KB = 1024 B 的二进制进位没有任何关系。这一点在跨境投放时尤其要留意,海外媒体报价单上的 CPM 一律按 1000 计。
展示的计数口径:一次「曝光」到底算什么,由行业机构而非算术定义。美国互动广告局 IAB 与媒体评级委员会 MRC 对展示广告的可视曝光给出的门槛是:广告素材至少 50% 的像素出现在可视区域内,且连续停留不少于 1 秒;视频广告则要求 50% 像素连续播放 2 秒。所以后台导出的曝光数和你按「用户真的看见」定义的曝光数常常不是同一个数,混用会让 CPM 相差一倍以上。
vCPM 与 CPC 是同一条公式的两次变形。把可见率 vr(百分数)代进去:vCPM = CPM ÷ (vr ÷ 100)——因为 1000 次曝光里只有 1000 × vr ÷ 100 次真正被看见,同一笔钱摊到更少的可见次数上,单价必然被抬高。示例里 CPM 为 3.00 元、可见率 70%,vCPM 就是 3 ÷ 0.70 = 4.2857,保留两位为 4.29 元。再把点击率 ctr(百分数)代进去:CPC = CPM ÷ (1000 × ctr ÷ 100),示例里 CPM 为 3.00 元、点击率 0.5%,即 1000 次曝光换来 1000 × 0.005 = 5 次点击,3 ÷ 5 = 0.60 元。这两条变形都是同一笔花费在不同分母上的重新分摊,输入变了结果就变,本页不缓存任何历史值。
完整示例(数值仅作演示)
示例条件:广告花费 1500 元,曝光次数 500000 次,目标曝光 2000000 次,目标 CPM 3.00 元/千次,可用预算 6000 元,可见率 70%,点击率 0.5%。逐项算下来:
- 千次展示成本:
1500 ÷ 500000 × 1000 = 3.00 元/千次; - 单次曝光成本:
1500 ÷ 500000 = 0.003 元; - 按当前 CPM 达成 200 万曝光所需预算:
3.00 × 2000000 ÷ 1000 = 6000.00 元; - 按目标 CPM 3.00 元、预算 6000 元可买曝光:
6000 ÷ 3.00 × 1000 = 2,000,000 次; - 折算每千次可见展示成本:
3.00 ÷ 0.70 = 4.29 元; - 折算单次点击成本:
3.00 ÷ (1000 × 0.005) = 0.60 元。
这组数字刻意做成闭合的:反推预算得到的 6000 元,正好是「可用预算」那一栏填的值;按这个预算反推出的 200 万次曝光,也正好是「目标曝光」那一栏填的值。你可以改其中任意一个数字,观察另外两个反推结果怎么联动,用来快速验证自己手里的报价单是否自洽。以上数值仅作演示,不代表任何媒体的真实报价或当前行情。
输入范围与对照表
下表固定曝光为 500000 次,逐档列出不同千次展示成本对应的总花费与单次曝光成本。表格默认显示 12 行,点「加载更多」展开全部 16 行,也可以导出成 CSV(带 BOM,Excel 直接打开不乱码)。
| 千次展示成本 CPM(元) | 50 万曝光对应花费(元) | 单次曝光成本(元) |
|---|---|---|
| 1 | 500 | 0.0010 |
| 2 | 1000 | 0.0020 |
| 3 | 1500 | 0.0030 |
| 4 | 2000 | 0.0040 |
| 5 | 2500 | 0.0050 |
| 6 | 3000 | 0.0060 |
| 8 | 4000 | 0.0080 |
| 10 | 5000 | 0.0100 |
| 12 | 6000 | 0.0120 |
| 15 | 7500 | 0.0150 |
| 18 | 9000 | 0.0180 |
| 20 | 10000 | 0.0200 |
| 25 | 12500 | 0.0250 |
| 30 | 15000 | 0.0300 |
| 40 | 20000 | 0.0400 |
| 50 | 25000 | 0.0500 |
常见口径混用对照:CPM 的分母是曝光,CPC 的分母是点击,CPA 的分母是转化,vCPM 的分母是可见曝光。四个指标算的是同一笔钱,但分母不同,数值之间没有可比性——同一个 3.00 的数字,放在 CPM 里是「千次 3 元」,放在 CPC 里是「一次点击 3 元」,相差 1000 倍的分母。
输入范围、边界与精度说明
- 曝光为 0 不会静默归零。花费除以 0 在 IEEE 754 下得到
Infinity,本页用Number.isFinite拦住并提示「曝光次数必须大于 0,允许 1 ~ 1000000000000」。同理,目标 CPM 为 0 时反推曝光也会被拦住,不会给出 Infinity。 - 数值上限是 1000000000000(10^12)。花费与曝光的输入框
max都设成这个值;超过后浏览器原生校验会先拦一道,本页还会再判一次并给出具体文案。 - 超过 9007199254740991 会丢精度。这是 JavaScript 的安全整数上限(
Number.MAX_SAFE_INTEGER),也就是 2^53 − 1。曝光计数通常远小于它,但把 19 位的订单号或流水号误填进曝光栏,末尾数字会被舍入。 - 小数位默认保留 2 位,可在「CPM 小数位」里改成 0~4 位。保留位数的取舍直接影响小额投放的可读性:单次曝光成本 0.003 元按 2 位保留会显示成 0.00,看起来像没花钱,所以本页对单次曝光成本固定按「小数位 + 2」位输出。
- 舍入用的是
Number.prototype.toFixed,它按十进制四舍五入,但二进制浮点并非精确表示十进制小数,所以边界上会出现0.005 → 0.01、0.004 → 0.00这种结果。结算金额请以媒体后台为准,本页结果用于快速比对。 - 可见率与点击率的单位是百分数,填 70 表示 70%,不是 0.7。允许范围分别是 1~100 和 0.0001~100;填 0 会让 vCPM 变成除零,本页会拦住并说明。
- 金额不做汇率换算。输入框只写数字,单位随你填的币种,本页不会把美元折成人民币。跨币种投放请先用汇率换算器统一口径,再填进本页。
常见问题
为什么我算出来的 CPM 和媒体后台显示的不一样?
最常见的原因是曝光计数口径不同:媒体后台可能按「请求数」「下发数」或「通过 MRC 可视标准的可视曝光数」统计,三者可以相差一倍以上。先确认后台导出的字段到底是哪一个,再填进「曝光次数」;如果后台给的是可视曝光,那你应该关注的是 vCPM 而不是 CPM。
CPM 是越低越好吗?
不一定。CPM 只衡量「触达一千人花了多少钱」,不衡量这一千人里有多少人会点击或下单。低价流量常常意味着人群宽泛或位置欠佳,实际转化成本反而更高。要判断贵贱,需要把 CPM 和点击率一起看,折算成单次点击成本甚至单次行动成本再比。
vCPM 为什么总是比 CPM 高?
因为分母变小了。1000 次曝光里只有可见的那部分被计入 vCPM,同一笔花费摊到更少的可见次数上,单价必然被抬高,抬高倍数是 1 除以可见率。示例中可见率 70%,3.00 元就被抬到 4.29 元;可见率降到 50%,同样的 3.00 元会变成 6.00 元。
反推出来的预算能直接拿去做投放计划吗?
只能当作量级参考。反推公式假设 CPM 在整个投放周期内保持不变,而实际竞价中 CPM 会随人群竞争、时段和频次上升。建议按反推值上浮一定比例做预算缓冲,并在投放中期用真实花费和曝光重算一次 CPM,再修正后半程的预算。
曝光填 0 为什么不是算出 0,而是报错?
因为花费除以 0 在数学上没有定义,在 IEEE 754 浮点规则下会得到 Infinity。如果这时显示成 0,你会误以为「不花钱也能买到曝光」,这比报错危险得多。本页用 Number.isFinite 判断,非有限值一律拦下并指出是「曝光次数」这个字段的问题以及允许范围。
CPM 里的 M 是百万还是千?
是千。Mille 在拉丁语里是一千,罗马数字 M 也表示 1000。广告行业的 CPM(Cost Per Mille)和印刷行业按千份计价的惯例一脉相承,都按 1000 计。真正表示百万的是 MM(千个千),在财务报表里偶尔出现,广告计价里不用。
这个页面会把我填的花费和曝光上传吗?
不会。全部逻辑就是一次除法加一次乘法,加上 Number.isFinite 和 toFixed,没有任何网络请求,也没有引入第三方库。你可以打开浏览器的开发者工具,在 Network 面板里确认这个页面加载后不再发起任何请求。
为什么小数位改成 0 之后单次曝光成本还是显示小数?
这是刻意的设计。单次曝光成本通常在 0.001 元量级,若也按 0 位保留会一律显示成 0,等于把有效信息抹掉。所以本页对 CPM 用你设定的小数位,对单次曝光成本固定多用两位,保证小额投放仍然可读。