demilio
@demilio

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

乱数の条件分け?JavaScript

解決したいこと

JavaScriptを勉強しています。

Math.random()関数が0以上1未満の乱数を返す。
Math.floor()で整数になる。
のは分かりました。

現状、q1、q2は整数のみですが、
それを20%の確率で小数点、80%の確率で整数
というふうにしたいです。

以下の「参考にしたコード」を参考にいろいろ試してみましたが、
応用を利かせられませんでした。

if文を使えば可能になるのでしょうか。

解決方法をよろしくお願いいたします。

JavaScript

const q1 = Math.floor(Math.random()*1000 + 1);
const q2 = Math.floor(Math.random()*1000 + 1);
        
console.log(q1);
console.log(q2);

参考にしたコード

 // 参考にしたコード
var x = Math.random();
if(x < 0.4){
    circle();
}else if(x < 0.75){
    triangle();
}else{
    rect();
}
0

2Answer

「20%の確率で小数、80%の確率で整数」になる関数を作ってみました。
参考になれば幸いです。

ひとつ注意点を挙げるとすれば、かなりの低確率ですが1000以上の小数が発生するパターンがあります。
最大値を1000にしたいのであれば、minなどを活用すれば簡単に1000以上の小数も考慮できると思います。
return returnValue;

return Math.min(returnValue, 1000)

See the Pen Untitled by yotty (@yotty) on CodePen.

1Like

Comments

  1. @demilio

    Questioner

    こんにちは。
    回答ありがとうございます。
    おかげさまで解決致しました。

    >>かなりの低確率ですが1000以上の小数が発生するパターンがあります。

    そうなのですね。
    プログラミングも興味深いです。

    1つ1つ勉強していきます。
  2. 解決したようでよかったです。
    最初は難しいことも多々あるかと思いますが、
    手を動かしつつ少しずつ理解を広げていってみてください!

Math.random()は0以上1未満の値が返ってくるので、その返ってきた数値を使用して確率で条件分けをすることができます。

Math.random()が0~0.19になる確率は20%
Math.random()が0.2~0.99になる確率は80%なのでこれを利用します。

// 20%の確率で少数、80%の確率で整数を返す関数
function a() {
  // bに0以上1未満の乱数を入れる
  const b = Math.random();
  // 0以上0.2未満なので20%の確率でtrueになる
  if (b < 0.2) {
    // 少数を返す
    return Math.random() * 1000 + 1;
  // 0以上0.2未満ではないということは、0.2以上1未満なので80%の確率で下記の処理ということになる
  } else {
    // 整数を返す
    return Math.floor(Math.random() * 1000 + 1);
  }
}

// 関数を実行して返ってきた値がq1,q2に入る
const q1 = a();
const q2 = a();

console.log(q1);
console.log(q2);
1Like

Comments

  1. @demilio

    Questioner

    こんにちは。
    回答ありがとうございます。
    おかげさまで解決致しました。

    function関数も少しずつですが理解できてきました。

    ただコピペだけでなく1つずつ勉強していこうと思います。

Your answer might help someone💌