maxの偏りを防ぐために、小数の範囲がmaxを超えるたびに、小数を取り除くのではなく、再計算しています。random()を使用すると、多少の偏りが生じると思いますが、それは許容範囲です。
オプションの arg decimalは、含める小数点以下の桁数を示す整数です。
オプションの arg excludeは、結果から特定の数値 (通常は 0) を除外するのに便利です。
すべての引数が省略された場合、オプションで true または false をランダムに返します。
基本的に、バイアスを追加したり、バイアスを減らしたりせずに速度と効率を上げる方法があるかどうか疑問に思っています。while ループが遅くなる可能性があるようです。私はこれをアニメーションに使用していますが、偏った結果を望んでいません (特に 1.0 から 2.0 のような小さな範囲では)。
function random(min, max, decimal, exclude) {
if (min == null) return (Math.random()*2 >= 1) ? true : false
var decimal = (decimal == null) ? 1 : Math.pow(10,decimal), result = exclude
while (result == exclude) {
result = max+1
while (result > max) var result = Math.round((Math.random()*(max-min+1)+min)*decimal)/decimal
}
return result
}