2012-01-12 6 views
1

То, что я пытаюсь сделать (но с полным смущением), состоит в том, чтобы сделать код на PHP, который выполняет код, основанный на вероятности, которая задается в десятичных числах (10 десятичных знаков max) где 1 будет 100% -ным шансом на выполнение кода. Вот что я пытался, но не работает должным образом:PHP шанс на случай, когда событие произойдет

<?php 
/* 
    Rate to chance. 
*/ 

//max 10 decimals 
$rate = '0.010000000000'; //<-- should equal 1% chance 

$chance = $rate*pow(10,10); 

$random = mt_rand(0,pow(10,10)); 

if($random < $chance) { 
    echo "Ok."; //should be shown 1 out of 100 times in this example 
} 
?> 

Почему я хочу, чтобы сделать эту работу, потому что я хотел бы иметь код выполняется с вероятностью менее 1% (например, 0,001%). Мой код (выше) не работает, и я, вероятно, делаю что-то довольно глупо и совершенно неправильно, но я надеюсь, что кто-то еще может мне помочь, потому что в настоящее время я совершенно смущен.

Заранее спасибо.

С наилучшими пожеланиями, Skyfe.

ответ

9

pow неправильный путь, это 1/rate:

<?php 
// 1 chance out of 2, 50% 
if (mt_rand(0, 1) === 0) { 
    … 
} 
// 1 chance out of 101, which is < 1% 
if (mt_rand(0, 100) === 0) { 
    … 
} 

$rate = (double) '0.01'; 
$max = 1 / $rate; // 100 
if (mt_rand(0, $max) === 0) { 
    // chance < $rate 
} 
+0

Ааа, конечно! Спасибо, я был довольно глупым> _ <спасибо! :) EDIT: получился один вопрос, хотя, если $ max является десятичным значением? (например, 32.59) mt_rand может возвращать целые числа сами по себе? –

+0

PHP будет в нем, как если бы вы это сделали: '$ max = (int) (1/$ rate);' – greut

+0

Ah Alright thanks :) –

Смежные вопросы