2016-11-06 189 views
0

所以,我想知道我在這裏做錯了什麼?它給我的號碼,如3.(我傳遞的變量爲 「7-10」)Math.random沒有返回正確的值

function getDmg(a, y) { 
    var s = Math.floor((Math.random() * (a.split('-')[1])) + (a.split('-')[0])); 
    if(y == true) { 
     console.log('You dealt ' + s + ' damage.'); 
    } else { 
     console.log('You took ' + s + ' damage.'); 
    } 
    return s; // Giving numbers like 3...? 
} 
+3

分割函數是一個字符串函數。在嘗試數學運算之前,您應該使用'parseInt()'或'parseFloat()'將split的結果轉換爲一個數字。 –

+0

只是一個替代方法[JSFiddle](https://jsfiddle.net/uc87xbc8/) – Rajesh

回答

0

的Math.random返回介於0(含)隨機值和1(獨家)。要獲得7到10的數字,您需要指定最大值,減去最小值,然後將最小值添加到結果

此調整後的代碼會返回您的範圍內的隨機損害賠償。 記住:如果你想有可能獲得10 MAX,你需要通過11爲Math.random上的價值,因爲上限值是獨家

function getDmg(a, y) { 
 
    var min = parseInt(a.split('-')[0],10); 
 
    var max = parseInt(a.split('-')[1],10); 
 
    
 
    var s = Math.floor(Math.random() * (max - min) + min); 
 
    if(y == true) { 
 
     console.log('You dealt ' + s + ' damage.'); 
 
    } else { 
 
     console.log('You took ' + s + ' damage.'); 
 
    } 
 
    return s; // Giving numbers like 3...? 
 
} 
 

 
getDmg("7-11", true); 
 
getDmg("7-11", false);

參見:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random關於Math.random()更多細節

+0

我傳球7-10,希望在7和10之間的數字。但它給了我數字waaayy比我預期。 – Anthemius

+0

@AppaXD好的,看我更新的答案。 –

+0

'parseInt'提取字符串開頭的數字。這與數字強制不完全一致。我建議不要使用它。 – Oriol

0
function getDmg(range, dealt) { 
    var damageRange = range.split("-"); 

    //This will have to be made more "error-proof" 
    var min = Number(damageRange[0]); 
    var max = Number(damageRange[1]); 

    //This formula will take the min and max into account 
    var calculatedDamage = Math.floor(Math.random() * (max - min + 1)) + min; 

    console.log((dealt ? "You dealt " : "You took ") + calculatedDamage + " damage."); 
    return calculatedDamage; 

} 

良好的回覆可以發現@Generate random number between two numbers in JavaScript