Generating decimal random numbers in Java in a specific range?

17,949

Solution 1

Random r = new Random();
double random = (r.nextInt(21)-10) / 10.0;

Will give you a random number between [-1, 1] with stepsize 0.1.

And the universal method:

double myRandom(double min, double max) {
    Random r = new Random();
    return (r.nextInt((int)((max-min)*10+1))+min*10) / 10.0;
}

will return doubles with step size 0.1 between [min, max].

Solution 2

If you just want between -1 and 1, inclusive, in .1 increments, then:

Random rand = new Random();
float result = (rand.nextInt(21) - 10) / 10.0;
Share:
17,949

Related videos on Youtube

Omid7
Author by

Omid7

Updated on September 15, 2022

Comments

  • Omid7
    Omid7 over 1 year

    How can I generate a random whole decimal number between two specified variables in java, e.g. x = -1 and y = 1 would output any of -1.0, -0.9, -0.8, -0.7,….., 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.9, 1.0?

    Note: it should include 1 and -1 ([-1,1]) . And give one decimal number after point.

    • Alexis C.
      Alexis C. over 9 years
    • Pshemo
      Pshemo over 9 years
      Tip: it is the same as generating random integers in range -10...10 and dividing them by 10.
  • snickers10m
    snickers10m over 9 years
    To use this answer as a general model, see that the -1 is the starting number and the 2.0 is the total range.
  • Alan Stokes
    Alan Stokes over 9 years
    The OP seems to want 0.1 and 0.2 to be possible results but not (say) 0.1234.
  • Pshemo
    Pshemo over 9 years
    (1) you don't need casting result of int/double to double because it is double, (2) this way you will never get 1.0 since nextInt(20) can return max 19.
  • yate
    yate over 9 years
    Your original way worked, you just needed to round after Math.round(randomDouble * 10) / 10d
  • Pshemo
    Pshemo over 9 years
    Yes, nextInt(21) will generate values in range 0, 20 (both inclusive) so after -10 range will change to -10,10 and after dividing by 10.0 to -1.0, 1.0.