2016-06-30 3 views
0

Я пытаюсь получить случайное число между двумя номерами из ввода в JavaScript. Когда я помещаю числа вместо max.value и min.value, это работает, но не с переменной. Я не могу понять, как работает случайное в js, на других языках программирования я знаю, что это легко сделать, как случайный (min, max), поэтому я совершенно не понимаю, почему в JS так сложно. Спасибо.случайное число js min max

function genRanNumb() { 
 
    document.getElementById('demo').innerHTML=Math.floor(Math.random()*(max.value-min.value+1)+min.value); 
 
}
<input type="text" id="min"> 
 
<input type="text" id="max"> 
 
<button id="btn" onclick="genRanNumb()">button</button> 
 
<p id="demo"></p>

+0

Checkout это .. после того, как 2с Google! http://stackoverflow.com/questions/1527803/generating-random-whole-numbers-in-javascript-in-a-specific-range – pleinx

+0

https://developer.mozilla.org/en-US/docs/Web/ JavaScript/Reference/Global_Objects/Math/random –

+0

отлаживает ваш код, и вы легко поймете, почему он не работает. – James

ответ

1

Я думаю, дело в том, ваши входы текст и ваш случайный хочет INT значения Решение заключается в surrond переменную с parseFloat(yourvariable) в JavaScript.
в вашем случае у вас есть:

function genRanNumb() { 
    document.getElementById('demo').innerHTML=Math.floor(Math.random()*(parseFloat(max.value)-parseFloat(min.value)+1)+parseFloat(min.value)); 
} 

Надеется, что это ответ на ваш вопрос.

Для лучшей читаемости и лучшей совместимости, вы должны написать это:

function genRanNumb() { 
    var max = parseFloat(document.getElementById("max").value,10), 
     min = parseFloat(document.getElementById("min").value,10); 

    document.getElementById('demo').innerHTML=Math.floor(Math.random()*(max-min+1)+min); 
} 
+0

Я только что проверил и parseInt() также существует [здесь] (https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/parseInt) – Gaetan

+0

Большое вам спасибо. Это работает. – ochj1ch

+0

Рад, что это тебе помогает – Gaetan

0

Ваша случайная логика правильный номер. Вам просто нужно получить значения из текстовых полей, которые являются строками, а затем проанализировать их как целые числа.

function genRanNumb() { 
 
    var min = parseInt(document.getElementById('min').value, 10); 
 
    var max = parseInt(document.getElementById('max').value, 10); 
 
    document.getElementById('demo').innerHTML=Math.floor(Math.random()*(max-min+1)+min); 
 
}
<input type="text" id="min"> 
 
<input type="text" id="max"> 
 
<button id="btn" onclick="genRanNumb()">button</button> 
 
<p id="demo"></p>

0

Probleme ваше значение в строку так, когда вы делаете:

(max.value-min.value+1)+(min.value) 

он хотел бы сделать, например, 6" + "5" так "65"

Так попробуйте :

<script> 
    function genRanNumb() { 
    document.getElementById('demo').innerHTML=Math.floor(Math.random()*(parseInt(max.value-min.value+1))+parseInt(min.value)); 
    } 

</script> 
3

Проблема в том, что входные элементы value всегда являются строками. Когда вы пишете max.value - min.value, JavaScript координирует значения чисел с помощью оператора вычитания. НО, когда вы пишете 0.3 + "8", результат "0.38" вместо "8.3". Вот почему исходный код дает странные значения, max.value никогда не добавляется, а добавляется. Здесь есть возможность, как это исправить: принуждать строки в число первых с uniary + оператора (или использовать ParseInt):

function genRanNumb() { 
 
    var vMin = +min.value; 
 
    var vMax = +max.value; 
 
    var generated = Math.floor(Math.random()*(vMax - vMin + 1) + vMin); 
 
    demo.innerText = generated; 
 
}
<input type="text" id="min"> 
 
<input type="text" id="max"> 
 
<button id="btn" onclick="genRanNumb()">button</button> 
 
<p id="demo"></p>

+0

+1 для вашего хорошего объяснения принуждения. Для остальной части ответа я хотел бы дать четвертый ответ с тем же контентом ...,) – Christoph

Смежные вопросы