Skip to content

实现 概率计算器 工具

分类:general | 标签:概率、统计、二项分布 独立事件/二项分布等概率计算

2.1 功能说明

独立事件/二项分布等概率计算

2.1.1 使用指南

功能说明

计算独立事件交并、n 次试验中至少一次、二项分布等常见概率。

使用场景

抽奖、风控、统计学习。

2.2 代码实现

2.2.1 组件结构

本工具是一个基于 Vue 3 <script setup> 语法的单文件组件(SFC),统一包裹在 ToolPageShell 组件内,由它提供页面标题、工具 ID、分类与「使用指南」插槽等通用外壳;核心业务逻辑(响应式状态、计算属性、事件处理函数)全部写在 <script setup> 中,输入/输出通过 el-inputel-button 等 Element Plus 组件与用户交互,所有数据均在浏览器本地处理,不会上传服务器。

2.2.2 核心逻辑概览

<script setup> 中定义的主要函数/方法:

  • gcd()
  • comb()
  • run()

2.2.3 关键实现代码

以下是该工具的完整 <script setup> 实现(核心代码)。模板(<template>)与样式(<style>)已省略。

vue
import { ref } from 'vue'
import ToolPageShell from '@/components/ToolPageShell.vue'

const mode = ref('and')
const pa = ref(50), pb = ref(30), n = ref(10), k = ref(2)
const error = ref(''), res = ref(null)

function gcd(a, b) { return b ? gcd(b, a % b) : a }
function comb(n, k) {
  if (k < 0 || k > n) return 0
  k = Math.min(k, n - k); let r = 1
  for (let i = 0; i < k; i++) r = r * (n - i) / (i + 1)
  return r
}
function run() {
  error.value = null; res.value = null
  const a = Number(pa.value) / 100
  if (![a].every(Number.isFinite) || a < 0 || a > 1) { error.value = '概率需在 0–100% 之间'; return }
  if (mode.value === 'and' || mode.value === 'or') {
    const b = Number(pb.value) / 100
    if (!Number.isFinite(b) || b < 0 || b > 1) { error.value = 'P(B) 需在 0–100% 之间'; return }
    res.value = mode.value === 'and' ? a * b : a + b - a * b
  } else if (mode.value === 'once') {
    const nn = Number(n.value)
    if (!Number.isInteger(nn) || nn <= 0) { error.value = 'n 须为正整数'; return }
    res.value = 1 - Math.pow(1 - a, nn)
  } else {
    const nn = Number(n.value), kk = Number(k.value)
    if (!Number.isInteger(nn) || nn <= 0) { error.value = 'n 须为正整数'; return }
    if (!Number.isInteger(kk) || kk < 0 || kk > nn) { error.value = 'k 须为 0–n 的整数'; return }
    res.value = comb(nn, kk) * Math.pow(a, kk) * Math.pow(1 - a, nn - kk)
  }
}

2.3 效果截图

概率计算器 效果截图

工具访问地址:https://www.i91tools.com/tools/probability