2016-06-30 15 views
0

JavaScriptから2つの数字の間の乱数を入力しようとしています。 max.valueとmin.valueの代わりに数値を入力すると、それは機能しますが、変数では機能しません。私はランダムな(最小、最大)のように簡単なことを知っているので、jsでどのようにランダムに動作するのか理解できません。なぜ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

チェックアウトこれは... 2秒のグーグルの後に! 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

私は、問題は、あなたの入力がテキストとあなたのランダムソリューションをJavaScriptでparseFloat(yourvariable)を使用して変数をsurrondすることです int型値を望んでいると思います。あなたが持っているあなたのケースで

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"と書くと、結果は"8.3"の代わりに"0.38"になります。そのため、元のコードでは奇妙な値が返され、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あなたの良い説明の強制。答えの残りの部分については、私は4番目の答えを同じ内容で与えることについて怒鳴ります...) – Christoph