我不太熟悉如何改变Math.random的范围或新的Random()以生成像这样的双精度。我需要能够产生一个介于-10到25美分之间的双倍(我的程序正在处理钱;因此为什么我说美分)。另外一个实例产生90到-75美分之间的随机双倍。当我在寻找答案时,我看到了这一点:
double result = Math.random()*(upper - lower)+ lower;
但是当我将这个想法实现到我的代码中时,当使用正数和负数之间的范围时,范围似乎不起作用...... 我测试了它的上限为0.25,下限为-0.10,但注意到它在我做过的一次测试中打印了0.3567587946356543。因此,我得出结论,我显然没有正确调整范围。
请帮助:(
这是我第一次使用stackoverflow,所以请放轻松我,我会详细说明我说的话没有意义..
这是我使用此代码的现有方法:
public double variation(double price){
//formula: (Math.random() * range) + min; where range = max - min
//80% of the time returns amount between -10 & 25 cents
if(Math.random() > 0.19){
return (Math.random() * 0.35) - 0.10;
}
//20% of the time returns amount between -75 & 90 cents
return (Math.random() * 1.65) - 0.75;
}
我知道这种方法需要双倍的价格才能使用;这是教师要求采取双倍价格而忽视其价值的一部分。所以请忽略它。
答案 0 :(得分:1)
现在您已将所有代码都包含在问题中,因此我的答案更改为:
打印0.3567587946356543
时,当Math.random()
中的第一个if(Math.random() > 0.19){
来电变为假时,它来自范围-.75到0.90的20%部分
旧答案:
我认为你忘记了较低值的负号
double upper = 0.25;
double lower = -0.10;
double result = Math.random() * (upper - lower) + lower;
答案 1 :(得分:1)
要在-10
和25
之间生成,请尝试: -
Random r = new Random();
int d = r.nextInt(35)+1;
d = d - 10;
double result = d/100.0;
或单线
double result = ((r.nextInt(35)+1)-10)/100.0;
答案 2 :(得分:0)
获取长十进制的输出: 它有点粗糙,但它完成了工作。
Random rand = new Random();// creates 'Random' method
int number = rand.nextInt(35)+1;// gets a random integer out of 35
double randDouble = rand.nextDouble();//gets a random double
double finalNumber = ((number + randDouble)-10)/100;//adds the integer and the double,
//subtracts ten, and divides by 100
System.out.println(finalNumber);// prints the number
以下是输出的一些示例(完全复制和粘贴)。
获得两位输出的输出:
Random rand = new Random(); // creates 'Random' method
float x = rand.nextInt(35)+1; // gets a random integer(0 through 35)
float y = x - 10; // subtracts that number by ten(making the new range -10 through 25)
float z = y/100; // puts number in decimal form
注意此行int number = rand.nextInt(35)+1
(长十进制版本)。你最后必须做+1
的原因是因为Java将1理解为0.见下面的图表
JAVA |0 1 2 3 4 5
-------|-----------
HUMANS |1 2 3 4 5 6
答案 3 :(得分:0)
看起来你的公式实际上是正确的:
double result = Math.random() * (upper - lower) + lower;
您可以通过将最小和最大可能随机(即零,1)
进行测试Random Value | Result
---------------------------
0 | -0.1 (lower)
1 | 0.25
0.5 | 0.075
0.01 | -0.0965
回过头来获取结果的随机值为0.356758795
,Math.random()
必须返回1.305025128
,但事实并非如此。 :)
话虽如此,Apache Commons3有这个漂亮的方法RandomUtils.nextDouble(double startInclusive, double endInclusive);
为你做这件事。
答案 4 :(得分:0)
我以400.0和-400.0为例。
double min = 400.0;
double max = 2 * min;
System.out.println(Math.random() * max - min);
输出为
138.0921773815627
212.7567891431654
9.063135840057157
-256.8594518458244
-99.84573995806142
116.53331370219462
33.29613621235126