2016-11-15 67 views
3

我想知道什麼是最小和最大之間生成隨機浮動數字的最佳方式。最小值和最大值都是EXCLUSIVEJavascript - 獲取最小和最大範圍內的隨機數。這兩個獨家

例如,分鐘= -1,最大= 100。然後,隨機數可以是-0.999 99.999或,但不能是-1或100

的方式我拿出首先產生一個隨機數介於-1(含)和100(獨家):

Math.random()*(max-min)+min

,如果該值等於-1,得到另一個隨機數,直到它不是-1。

整個事情是:

var min = -1, max = 100; 
var rand = min; 
while(rand==min) 
    rand = Math.random()*(max-min)+min; 

是否有更好的方法來做到這一點,所以我沒有可能運行Math.random()幾次?

+1

限制,請仔細閱讀我的問題。我想要最小和最大獨佔。謝謝。 – Shawn

回答

2

您可以先檢查隨機數並只使用不等於零的值。

var min = -1, 
 
    max = 100, 
 
    r; 
 

 
while (!(r = Math.random()));  // generate and check and use only r !== 0 values 
 
console.log(r * (max - min) + min);

+0

這個答案如何比我提供的更好?他們幾乎是一樣的。我想避免多次運行'Math.random()'的可能性。謝謝! – Shawn

+1

@Shawn它只是更好,因爲在最糟糕的情況下它會減少計算次數,因此需要多次嘗試才能得到不是「min」的數字。這並沒有太大的改進,因爲你的問題的答案是「不行,沒有辦法在」Math.random「的一次運行中產生一個浮點隨機數。 – 4castle

+0

這只是一個不好的做法。創建一個無限循環 – N1ckles

1

只要用你的代碼去除與所需precission

var p = 0.000001; //desired precission 
var min = -1+p, max = 100-p; 
rand = Math.floor(Math.random()*(max-min)+min) 
+0

對不起,這只是一個例子,它應該是-1到100之間的任何浮點數。所以它可能是0.999999。 – Shawn

+1

在這種情況下,用javascript max precission替換p值用於double va梅毒。我想沒有其他辦法可以避免幾次調用Math.random – pedrofb

+0

是0.00000000000000001的最大精度? – Shawn

相關問題