【javascript】基于Math.random生成确定区间随机数的方法

一、简介

Math.random的生成结果是一个double型数据,其区间下限为0.0,上限为无限接近1.0。即[0,1)。 

二、需求

获取某区间内随机数。

三、方法

使用Math下的random随机数生成函数。

四、区间值实际应用

4.1浮点型

4.1.1[0,1)

代码如下:

function frandom(){
    return Math.random()
}

4.1.2[0,n)

代码如下:

function frandom(n){
    return Math.random()*n
}

4.1.3[m,n)

代码如下:

function frandom(m,n){
    return m+Math.random()*(n-m)
}

4.2整型-[x,y]

4.2.1[0,1]

代码如下:

function frandom(){
    return Math.floor(Math.random()*2)
}

4.2.2[0,n]

代码如下:

function frandom(n){
    return Math.floor(Math.random()*(n+1))
}

4.2.3[m,n]

代码如下:

function frandom(m,n){
    return Math.floor(m+Math.random()*(n-m+1))
}

4.3整型-[x,y)

4.3.1[0,1)

代码如下:

function frandom(){
    return Math.floor(Math.random())
}

4.3.2[0,n)

代码如下:

function frandom(n){
    return Math.floor(Math.random()*n)
}

4.3.3[m,n)

代码如下:

function frandom(m,n){
    return Math.floor(m+Math.random()*(n-m))
}

4.4整型-(x,y]

4.4.1(0,1]

代码如下:

function frandom(){
    return Math.floor(Math.random()+1);
}

4.4.2(0,n]

代码如下:

function frandom(n){
    return Math.floor(Math.random()*n+1);
}

4.4.3(m,n]

代码如下:

function frandom(m,n){
    return Math.floor(m+Math.random()*(n-m)+1);
}

4.5整型-(x,y)

4.5.1(0,1)

代码如下:

function frandom(){
    return undefined;
}

4.5.2(0,n)

代码如下:

function frandom(n){
    return Math.floor(1+Math.random()*(n-1));
}

4.5.3(m,n)

代码如下:

function frandom(m,n){
    return Math.floor(m+1+Math.random()*(n-m-1));
}

五、总结

由于端点的特殊性,因此为了匹配random的生成机制[0,,1),确保概率理论上尽可能稳定,仅使用Math.floor限制整型数据。至于为什么不用ceil或round,在文章“【python】关于Math.floor、Math.ceil以及Math.round应用在随机数中的区别分析_Evenurs的博客-CSDN博客”中分析。

附录 测试用html5源码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">

    <title>Simulate Tools-By_Even-2022-7-25</title>
    <style type="text/CSS">
        #header{
            background-color: black;
            color: white;
            text-align: center;
            padding: 5px;
        }
        #nav{
            line-height: 30px;
            background-color: #eeeeee;
            height: 300px;
            width: 100px;
            float: left;
            padding: 5px;
        }
        #section{
            width: 800px;
            float: left;
            padding: 10px;
        }
        #footer{
            background-color: black;
            color: white;
            clear: both;
            text-align: right;
            padding: 5px;
        }
    </style>

    <script type="text/javascript">

        function funcpsbinit() {
            document.getElementById("inptimes").value = 0;
            document.getElementById("idtaresult").value = "NULL";
        }
        function funcrandom(base) {
            return Math.floor(Math.random() * (base + 1));
        }

        function frandom() {
            return undefined;
        }
        function floop() {
            var texts = "";
            var cnt = 0;
            var val1 = 0;
            var val2 = 0;
            while (1) {
                if (1 == frandom()) {
                    val1 += 1;
                } else {
                    val2 += 1;
                }
                cnt++;
                if (cnt > 1000)
                    break;
            }
            texts += "1:" + val1 + " 2:" + val2;
            return texts;
        }
        function funcpsbenter() {
            var times = document.getElementById("inptimes").value * 1;
            document.getElementById("idtaresult").value = floop();
        }

    </script>
</head>

<body>
    <div id="header">
        <p>仿真器<b></b></p>
    </div>
    <div id="nav">
        <p>工具<b>1</b></p>
        <p>工具<b>2</b></p>
        <p>工具<b>3</b></p>
    </div>
    <div id="section">
        <table border="1" cellspacing="2" cellpadding="5" frame="both" rules="both">
            <caption>主要</caption>
            <tr>
                <th>刷新次数</th>
                <th>
                    <input type="number" name="points" value="0" min="0" max="999" step="1" id="inptimes">
                </th>
                <th>
                    &nbsp;
                    <button id="psbinit" style="width:inherit" onclick="funcpsbinit()">初始化</button>
                    &nbsp;
                    <button id="psbenter" style="width:inherit" onclick="funcpsbenter()">确定</button>
                    &nbsp;
                </th>
            </tr>
        </table>
        <textarea name="taresult" id="idtaresult" cols="60px" rows="40px">
        </textarea>
    </div>
    <div id="footer">
        Copyright V1.02
    </div>
    <script type="text/javascript">
        readlocaldateoption();
    </script>
</body>

</html>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值