Appearance
实现 概率计算器 工具
分类:general | 标签:概率、统计、二项分布 独立事件/二项分布等概率计算
2.1 功能说明
独立事件/二项分布等概率计算
2.1.1 使用指南
功能说明
计算独立事件交并、n 次试验中至少一次、二项分布等常见概率。
使用场景
抽奖、风控、统计学习。
2.2 代码实现
2.2.1 组件结构
本工具是一个基于 Vue 3 <script setup> 语法的单文件组件(SFC),统一包裹在 ToolPageShell 组件内,由它提供页面标题、工具 ID、分类与「使用指南」插槽等通用外壳;核心业务逻辑(响应式状态、计算属性、事件处理函数)全部写在 <script setup> 中,输入/输出通过 el-input、el-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 效果截图
