2012-04-24 79 views
0

Java api有一個關於如何生成0(含)和n(獨佔)之間整數的方法,但沒有方法生成隨機數的雙值,給定一定範圍內,比如2.0到3.0。如何才能做到這一點?範圍內的隨機(雙值)數生成器


double x = 0.7 + Double.valueOf(Math.random()*(9.0-0.7)).intValue(); 

結果其0.7

+0

完全重複:http://stackoverflow.com/questions/363681/java-generating-random-number-in-a-range – 2012-04-24 02:15:13

+0

你對我的人,我已經看到它,但它說話a =僅關於INTEGRES。我需要雙打 – FranXh 2012-04-24 02:18:30

+0

這很容易推廣。只需投下整數並乘以一個隨機生成的double。 – 2012-04-24 02:20:10

回答

2

類型的只是幾個數字你很接近,但intValue()調用是不必要的和Double.valueOf(String)通話甚至不應該編譯。

public double random(double min, double max) 
{ 
    double diff = max - min; 
    return min + Math.random() * diff; 
} 
+0

謝謝,我覺得這個作品。我期待在小數點後只有一位數的情況下獲得雙打,但我想這也會起作用。 – FranXh 2012-04-24 02:34:52

+1

@ user1181847由於Java'doubles'是二進制數,所以像'10.3'這樣的值不能完全表示,所以在小數點後面要求一個數字爲'double'是沒有意義的。但是,如果要打印舍入到小數點後一位的數字,請嘗試:'System.out.printf(「%.1f%n」,10.3)'。還請查看[DecimalFormat](http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html)類。 – ulmangt 2012-04-24 02:45:11

+1

@ user1181847:如果你想要的是隨機數的步長爲0.1,那麼使用整數解法來計算數字10 *你想要的數字(即如果你想要7到9之間,解決70到90)。然後取結果併除以10.0。 – 2012-04-24 02:59:32

1

標記的答案不包括最大值(nextDouble的最大值是0.9)。作爲一個便箋,我想提出我的答案,包括最大值。

public double randomDouble(double min, double max) { 
    double divider = 1.1111111111111111111111111111111; 
    double num = min + (random.nextDouble() * ((max - min) * divider)); 
    return num2; 
}