user2426701
user2426701

Reputation:

PHP generate a random minus or plus percentage of a given value

I have a value, lets say its 1000. Now I have to generate a random minus or plus percentage of 1000. In particular I have to generate or a -20% of 1000 or a +20% of 1000 randomly.

I tried using rand() and abs() but with no success..

Is there a way in PHP to achieve the above?

Upvotes: 0

Views: 2714

Answers (4)

PedroClemo
PedroClemo

Reputation: 23

I know this is really old now but stumbled across it looking for something similar where I needed a random sign (+ or -) so opted for a random boolean:

<?php $sign = (rand(0,1) == 1) ? '+' : '-'; ?>

Thanks to this this answer.

So I would opt for a solution like this:

<?php

// Alter these as needed
$number = 1000;
$percentage = 20;

// Calculate the change
$change_by = $number * ($percentage / 100);

// Set a boolean at random
$random_boolean = rand(0,1) == 1; 

// Calculate the result where we are using plus if true or minus if false
$result = ($random_boolean) ? $number + $change_by : $number - $change_by;

// Will output either 1200 or 800 using these numbers as an example
echo $result;

?>

Upvotes: 0

Mark Baker
Mark Baker

Reputation: 212412

A bit of basic mathematics

$number = 1000;
$below = -20;
$above = 20;
$random = mt_rand(
    (integer) $number - ($number * (abs($below) / 100)),
    (integer) $number + ($number * ($above / 100))
);

Upvotes: 2

Kylie
Kylie

Reputation: 11749

$number = 10000;
$percent = $number*0.20;
$result =  (rand(0,$percent)*(rand(0,1)*2-1));

echo $result;

Or if you want some sort of running balance type thing....

function plusminus($bank){
 $percent = $bank*0.20;
 $random = (rand(0,$percent)*(rand(0,1)*2-1));
 return $bank + $random;
}

$new =  plusminus(10000);
$new = plusminus($new);
echo $new."<br>";
$new = plusminus($new);
echo $new."<br>";
$new = plusminus($new);
echo $new."<br>";
$new = plusminus($new);
echo $new."<br>";
$new = plusminus($new);
echo $new."<br>";
$new = plusminus($new);

Upvotes: 0

Louis Ricci
Louis Ricci

Reputation: 21086

rand(0, 1) seems to work fine for me. Maybe you should make sure your percentage is in decimal format.

<?php
$val = 10000;
$pc = 0.2;
$result = $val * $pc;
if(rand(0, 1)) echo $result; else  echo -$result;
if(rand(0, 1)) echo $result; else  echo -$result;
if(rand(0, 1)) echo $result; else  echo -$result;
if(rand(0, 1)) echo $result; else  echo -$result;
if(rand(0, 1)) echo $result; else  echo -$result;
?>

Upvotes: 0

Related Questions