Rand ist für ganze Zahlen (ganze Zahlen)
First up, um Ihre Nutzung des Randes zwischen zwei Dezimalwerte (so genannte Floats) wird nicht funktionieren, da rand nur für ganze Zahlen ist. Also, würden Sie zuerst eine Zufallsfunktion haben wollen, die Ausgabe schwimmt der Fall ist, wie folgt aus:
function randomFloat($min = 0, $max = 1) {
return $min + mt_rand()/mt_getrandmax() * ($max - $min);
}
Dann können wir es sicher verwenden, um zwischen, sagen wir, 1% und 5%:
$percentSwing = randomFloat(0.01, 0.05);
Rand standardmäßig auf 0 oder 1. Das können wir verwenden zufällig es zu invertieren, so decken wir auch -1% bis -5%:
$percentSwing *= rand() ? 1 : -1;
Die oben auch so geschrieben werden:
if(rand() == 1){
// Do nothing:
$percentSwing *= 1;
}else{
// Invert it:
$percentSwing *= -1;
}
Also, wir wissen jetzt, wie viel wir brauchen, um die Zahl um zu schwingen. Sagen wir, es $oilPrice
war:
$oilPrice = 48;
Wir können nur die prozentuale Swing multiplizieren mit dieser Zahl die Menge, um es durch das ändert, dann fügen Sie wieder auf:
$oilPrice += $percentSwing * $oilPrice;
So weit, so gut! Jetzt müssen wir sicherstellen, dass der Preis nicht außerhalb unseres festen Bereichs von 10 bis 75 liegt. Angenommen, Sie wollen die Zahl "klemmen" - das bedeutet, wenn sie unter 10 liegt, ist sie auf 10 gesetzt und umgekehrt wie folgt aus:
if($oilPrice < 10){
// It went below 10 - clamp it:
$oilPrice = 10;
}else if($oilPrice > 75){
// It went above 75 - clamp it:
$oilPrice = 75;
}
die oben auch in einer Zeile dargestellt werden kann, wie folgt aus:
$oilPrice = max(10, min(75, $oilPrice));
So, das gibt uns die ganze Sache:
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;
Als Randbemerkung hier, Geld in realen finanziellen Syste ms wird nie als Gleitkomma gespeichert, weil rounding errors can cause major problems.
Haben Sie einen Fehler erhalten? Was geschieht? Bitte fügen Sie Ihren tatsächlichen Code hinzu. – chris85
Normalerweise würden Sie den Wert "schwenken" und dann prüfen, ob er in Reichweite ist. I.e. addiere die Zufallszahl und überprüfe, ob sie unter 10 oder über 75 liegt. Das hängt auch davon ab, wie du reagieren möchtest, wenn dies passiert (sollte es nichts tun, oder an den Grenzen klemmen). –
können Sie den Code kopieren und einfügen, wählen Sie ihn aus und klicken Sie auf die '{}' Taste, die es lesbar formatiert :) – niceman