Hello and welcome to our community! Is this your first visit?
Enjoy an ad free experience by logging in. Not a member yet? Register.

# Thread: JavaScript Function: Generate a random integer within specified range AND digit limit

1. ## JavaScript Function: Generate a random integer within specified range AND digit limit

I need a function that generates a completely random integer (very important) within a user specified number range (between -9999 to 9999) and a user specified digit limit (between 1 and 4 digits).

Example 1: If the user wants a number between -9999 and 9999 that's 4 digits, the following numbers would be eligible choices -9999 to -1000 and 1000 to 9999.

Example 2: If the user wants a number between 25 and 200 that's 2 OR 3 digits, the following numbers would be eligible choices 25 to 200.

I wrote a function that works but I am not sure if it's the best solution? There's duplicate code and I don't think it's completely random? Thanks.

Code:
```// Generates a random integer
// Number range
// Min (-9999-9999)
// Max (-9999-9999)
// Digit limit
// Min (1-4)
// Max (1-4)

function generateRandomInteger(minNumber, maxNumber, minDigits, maxDigits) {

// Generate a random integer in the number range
var num = Math.floor(Math.random() * (maxNumber - minNumber)) + minNumber;

// Find number of digits
var n = num.toString();
n = n.length;

// If number is negative subtract 1 from length because of "-" sign
if (num < 0) {
n--;
}
// End: find number of digits

while ((n > maxDigits) || (n < minDigits)) {
// Generate a random integer in the number range
num = Math.floor(Math.random() * (maxNumber - minNumber)) + minNumber;

// Find number of digits
var n = num.toString();
n = n.length;

// If number is negative subtract 1 from length because of "-" sign
if (num < 0) {
n--;
}
// End: find number of digits
}

return num;
}```

2. As you say, the code can be simplified, but otherwise seems to work OK. The number generated is random (actually pseudo-random, but that is the best you can do!)

Code:
```<script type = "text/javascript">

// Generates a random integer
// Number range
// Min (-9999-9999)
// Max (-9999-9999)
// Digit limit
// Min (1-4)
// Max (1-4)

function generateRandomInteger(minNumber, maxNumber, minDigits, maxDigits) {

var len = 0;  // initialise len
while ((len > maxDigits) || (len < minDigits)) {
// Generate a random integer in the number range
num = Math.floor(Math.random() * (maxNumber - minNumber)) + minNumber;
// Find number of digits
var n = num.toString();
len = n.length;
// If number is negative subtract 1 from length because of "-" sign
if (num < 0) {len--}
// End: find number of digits
}
return num;
}

alert (generateRandomInteger(100, 5000, 3, 4) );

</script>```
You need to check that the user data is consistent, e.g. not 10,99,3,4 or an infinite loop is set up.

"Never attribute to malice that which can be adequately explained by stupidity." - Napoleon Bonaparte

Code:
```function randomizer( min, max, digits ) {
if(isNaN(digits)){digits=4;}
if( min > max ) {
return( -1 );
}
if( min == max ) {
return( min );
}

var rands=( min + parseInt( Math.random() * ( max-min+1 ) ) );
rands=rands.toString();
var returner='';
for(var i =0; i<digits; i++){
returner+=rands[i];
if(isNaN(rands[i])){digits++;}
}
return parseInt(returner);
}```

4. Labrar - please post Javascript code within code tags. Not php tags! That is likely to confuse beginners.

5. Sorry. How? is it [JS], [JavaScript] ???

Edit: got it
Is there any button to do this?

6. Edit:
wrong solution

7. Not if you read and understand the OP's post

He wants to exclude those random numbers that are not of a certain length

Example: Random number with 3 to 4 digits between -10000 and 10000 would exclude those numbers that are only two digits (like -12 or 98)

8. yep you're right - deleted my post

9. There's no need for a loop. The following code does it with only one call to Math.random as the number returned always maps to within the required range with the same distribution regardless of what numbers are entered.

Code:
```function generateRandomInteger(minNumber, maxNumber, minDigits, maxDigits) {
var minNum, maxNum, minDigNum, maxDigNum, range, num;
minNum = Math.min(minNumber, maxNumber);
maxNum = Math.max(minNumber, maxNumber);
minDigNum = Math.pow(10,minDigits-1);
if (minNum<0) minDigNum *= -1;
else minDigNum = Math.max(maxNum, minDigNum);
maxDigNum = Math.pow(10,maxDigits-1);
if (maxNum<0) {
maxDigNum *= -1;
if (maxDigNum<minDigNum) maxDigNum = minDigNum = maxNum;
}
else maxDigNum = Math.max(minDigNum, maxDigNum);
range =minDigNum-minNum+maxNum-maxDigNum+2;
if (minDigNum===maxDigNum) range--;
num = Math.floor(Math.random()*range)+minNum;
if (num > minDigNum) num += maxDigNum;
return num;
}```

10. Yet another good example of a different way to skin a cat.

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•