D20骰子滚轴

掷骰不必翻实体骰子。设定骰子数量与面数(d4、d6、d8、d10、d12、d20、d100 任选),点一下就掷出每一颗的结果和总和,还附带单颗 D20 的概率对照表。所有随机数都在你的浏览器本地生成,不会上传任何数据。

默认掷 3 颗 d20。在数量框按回车也能立即掷;每次都是独立随机结果。

使用方法

  1. 在「骰子数量」里填想掷几颗,范围 1 到 20,默认 3 颗。这是带上下限和步进的输入框,最小 1、最大 20、每次增减 1。
  2. 在「骰子面数」里选 d4、d6、d8、d10、d12、d20 或 d100,默认 d20;桌游里最常见的就是二十面骰。
  3. 点掷骰,或在数量框里按 回车,结果区会列出每一颗的点数和它们的总和,并标注这次组合的期望总和。
  4. 点复制结果把「d20 ×3:14 + 7 + 19 = 40」这类文字带走,方便贴进聊天或战报。数量或面数填错时,页面会用红字具体说明,不会静默归零。

这个 D20 骰子滚轴能解决什么问题

一是跑团与桌游判定。龙与地下城等规则大量用 d20 做攻击、豁免、技能检定,本工具一键掷出多颗,省去手搓实体骰或心算总和。

二是教学演示概率。讲「均匀分布」「期望值」时,当场掷几十次看分布,比纯讲公式直观;下方对照表把累计概率列清楚。

三是快速随机决策。把面数设成 d100 就能做百分骰,用来抽权重、判定暴击,或临时做个公平随机。

本页不做这些事:它不记忆历史、不累计胜率曲线、不做带权重的「出老千」式偏向,也不替代真实赌博用的真随机源;这些请改用专门的统计或随机工具。

掷骰算法原理与技术内核

D20骰子滚轴里每一颗骰子的点数都用同一句算出:点数 = Math.floor(Math.random() × 面数) + 1。因为 Math.random() 返回 0(含)到 1(不含)的小数,乘面数后取整得到 0 到面数减一,再加 1 就把范围平移到 1 到面数,正好覆盖一颗骰子的所有可能。

技术内核可以拆成六个具体问题:

  1. 调用了哪个函数:单颗用 Math.floor(Math.random() * sides) + 1,多颗用循环把每颗结果塞进数组,再用 reduce 求总和;全部是浏览器原生函数,无外部库。
  2. 关键参数为什么取这个值:必须 +1,否则会出现 0 点(真实骰子没有 0);面数直接取自下拉框,保证结果严格落在 1–sides 闭区间。若漏掉 +1,d20 就会偶尔掷出 0,破坏判定逻辑。
  3. 遵循哪个标准:每颗骰子服从离散均匀分布,每个面概率相等(d20 为 1/20);随机数来自 W3C 定义的 Math.random(),属于密码学不安全的伪随机,足够桌游与演示,但别用于真实赌注。
  4. 输入经过怎样的转换得到输出:数量 N 与面数 S 进入循环,逐颗生成 1–S 的整数,拼成列表如 [14,7,19],再求和得到 40;同时给出数学期望值 S 加一除以二(d20 为 10.5)乘以 N 作为参考。
  5. 边界与阈值:数量限定 1–20、步进 1;面数只接受下拉里的 4/6/8/10/12/20/100;总和最大为 20×100=2000,远小于 JavaScript 安全整数 9007199254740991,不会丢精度;空值或非整数数量会被具体提示而非归零。
  6. 常见误用的正确解释:第一,每次掷骰彼此独立,上一次出 20 不会让下一次更容易出小,也没有「手气」;第二,Math.random 不可设定种子,刷新后无法复现同一局,需要可复现请改用带种子的随机工具;第三,期望值 10.5 是长期平均,单次结果可能偏离很大,这正是随机性的体现。

完整示例(数值为真实计算结果)

输入范围与概率对照表

下表列出单颗 D20 每个点数的概率与累计概率(每面 5%),前 12 行直接显示,点「加载更多」展开剩余 8 行。可导出 CSV(带 BOM)或 JSON(不带 BOM),也可一键复制 TSV。

点数单面概率累计概率(≤该点)
15.00%5.00%
25.00%10.00%
35.00%15.00%
45.00%20.00%
55.00%25.00%
65.00%30.00%
75.00%35.00%
85.00%40.00%
95.00%45.00%
105.00%50.00%
115.00%55.00%
125.00%60.00%
135.00%65.00%
145.00%70.00%
155.00%75.00%
165.00%80.00%
175.00%85.00%
185.00%90.00%
195.00%95.00%
205.00%100.00%

边界、精度与常见误用

常见问题

为什么有时候连掷好几个 20,是不是有 bug?

不是。每次掷骰彼此独立,连续出 20 属于正常的随机波动;d20 出 20 的概率是 5%,连掷多次遇到几次完全在概率范围内。想验证可多掷几十次看分布是否趋近每面 5%。

结果里的「期望总和≈31.5」是什么意思?

期望值是长期平均:单颗 d20 的均值 (1+20)/2 = 10.5,3 颗就是 31.5。它是统计参考线,单次实际总和可能远高于或低于它,不代表你「应该」掷出 31.5。

我能掷超过 20 颗吗?

本页把数量上限设为 20,足够绝大多数桌游与演示;更大的批量会瞬间刷出大量数字,反而难看清。需要超大批量随机请改用随机数字生成器类工具。

这个随机数和彩票、抽马斯卡是一样随机吗?

数学上都是伪随机,但 D20骰子滚轴用的是浏览器通用 Math.random,并非密码学安全随机源,也没有第三方审计。正式博彩、抽奖或安全用途请勿依赖它。

为什么数量框里按回车就能掷?

因为数量框是单行输入,回车没有别的语义,本工具把回车绑定成「掷骰」;面数用下拉框选择。这样不用每次去点按钮,连续多次掷更顺手。

导出的 CSV 在 Excel 里乱码怎么办?

本页 CSV 已在开头写入 UTF-8 的 BOM,正常用 Excel 打开中文不会乱码;纯文本编辑器开头看到几个乱码字符是 BOM 本身,属正常现象,不影响数据。

我掷出的结果会被保存或上传吗?

不会。所有随机数都在你本地浏览器生成,页面不发起任何网络请求,关闭或刷新后结果即消失,不会留下记录。

能不能让某颗骰子更容易出大数(加权)?

本页不做加权,每面严格等概率,这是公平掷骰的默认;带偏向的「出老千」式随机属于另一类需求,不在本工具范围内。

相关工具