みさご解体新書

パーセンテージ指定による確率判定

コード例

export function percent(value: number): boolean {
  return Math.random() * 100 < value;
}
import { percent } from "./random";

// 47%の確率でtrueが返る。
console.log(percent(47));

ソースコード

random.ts / app.ts

解説/アルゴリズム

Math.random の乱数の範囲は、 0以上 1未満 になる。

指定したいパーセンテージの範囲は 0 ~ 100(%) なので、乱数値と比較する前に、引数のパーセンテージ値を 100 で割る。

パーセンテージ値の範囲が 0 ~ 1 になるので、 100 を掛けた乱数値と比較して結果を出す。

関係演算子が < なのは、 <= だと 0(%) を指定したときに true が返る可能性があるから。

100(%) を指定した場合でも、乱数は 1 を返すことはないので < の比較で結果は必ず true になる。

内部で利用しているアルゴリズム

擬似乱数