首先发帖,请保持温和。
我试图创建一个简单的市场脚本,例如我在我的数据库中有一个数字,即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
?>
答案 0 :(得分:0)
首先,你在两个十进制值(称为浮点数)之间使用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。