首页 > 解决方案 > 从百分比计算发生的事件

问题描述

我找不到任何答案,所以我在这里问。

如何根据百分比计算是否应触发事件?

让我解释。

假设一个事件发生的概率为 30%。

当我运行脚本(调用函数)时,我如何知道该事件是否属于 30%?

基本上,最后,我必须从函数中返回 true 或 false。

希望你明白我的意思。

我有自己的解决方案,但我认为这是不正确的:

$evasion_percent = 30;       
$did_evasion = false;
$my_evasion_number = mt_rand(0,100);

if ($my_evasion_number <= $evasion_percent) {
  $did_evasion = true;
}

return $did_evasion;

谢谢。

标签: phpmathprobability-theory

解决方案


你需要从 1 到 100 随机,而不是从 0 到 100,其余的看起来都很好。

<?php

function trigger_event($percent) {
    $did_evasion = false;
    $my_evasion_number = mt_rand(1, 100);

    if ($my_evasion_number <= $percent) {
        $did_evasion = true;
    }

    return $did_evasion;
}

您还可以尝试大量调用(1000、100000 甚至更多),并查看触发事件的一部分如何接近您的百分比:

$evasion_percent = 30;

$m = 0;
for($n = 1; $n <= 1000; $n++) {
    $m += trigger_event($evasion_percent) ? 1 : 0;
}

echo $m / $n * 100;

推荐阅读