PHP - 以较小的市场百分比改变价值

时间:2017-03-03 12:53:34

标签: php cron percentage

首先发帖,请保持温和。

我试图创建一个简单的市场脚本,例如我在我的数据库中有一个数字,即50.00,我想运行一个cron job php脚本来随机增加或减少至少10.00和一个最多75.00。

我认为随机0,1跟随2 if语句1 rand(-0.01,0.05)如果2 rand(0.01,0.05)然后$sql = "UPDATE price SET oil='RESULT'";

我已经尝试了几次,但我无法让它运行,文件中的其他crons也可以运行。

    <?php
//Get Oil Price from database
$oilchange = rand(1, 2);
if ($oilchange == '1') { 
  $oilnew = rand(0.01,0.05);
//Oil price from database times oil new.

} else { 
  $oilnew = rand(-0.01,-0.05);
//Oil price from database times oil new.
}
// Update Price
?>

1 个答案:

答案 0 :(得分:0)

Rand是整数(整数)

首先,你在两个十进制值(称为浮点数)之间使用rand不会起作用,因为rand仅用于整数。所以,你首先想要一个输出浮点数的随机函数,如下所示:

function randomFloat($min = 0, $max = 1) {
    return $min + mt_rand() / mt_getrandmax() * ($max - $min);
}

然后我们可以安全地在1%和5%之间使用它:

$percentSwing = randomFloat(0.01, 0.05);

Rand默认为0或1.我们可以使用它来随机反转它,所以我们也覆盖-1%到-5%:

$percentSwing *= rand() ? 1 : -1;

以上也可以这样写:

if(rand() == 1){
    // Do nothing:
    $percentSwing *= 1;
}else{
    // Invert it:
    $percentSwing *= -1;
}

所以,我们现在知道我们需要多少摆动这个数字。我们说这是$oilPrice

$oilPrice = 48;

我们可以将摇摆百分比乘以该数字以获得它所改变的数量,然后重新添加:

$oilPrice += $percentSwing * $oilPrice;

到目前为止一切顺利!现在我们需要确保价格没有超出10到75的固定范围。假设你想要“钳制”#39;数字 - 这意味着如果它低于10,它设置为10,反之亦然,那就是这样做的:

if( $oilPrice < 10 ){
    // It went below 10 - clamp it:
    $oilPrice = 10;
}else if( $oilPrice > 75 ){
    // It went above 75 - clamp it:
    $oilPrice = 75;
}

以上也可以用一行表示,如下所示:

$oilPrice = max(10, min(75, $oilPrice));

所以,这给了我们整个事情:

function randomFloat($min = 0, $max = 1) {
    return $min + mt_rand() / mt_getrandmax() * ($max - $min);
}

// Define the oil price (e.g. pull from your database):
$oilPrice = 48;

// get a random 1% to 5% swing: 
$percentSwing = randomFloat(0.01, 0.05);

// Invert it 50% of the time:
 $percentSwing *= rand() ? 1 : -1;

// Swing the price now:
$oilPrice += $percentSwing * $oilPrice;

// Clamp it:
$oilPrice = max(10, min(75, $oilPrice));

// Output something!
echo $oilPrice;

作为一个侧面说明,真实金融系统中的资金永远不会存储为浮动,因为rounding errors can cause major problems