为什么即使0不在范围内,函数0的输出也是如此?

时间:2019-08-29 15:31:11

标签: javascript node.js ecmascript-6

我是一名学习javascript和NODE.js的Python开发人员。我正在练习一些JavaScript,而我在python中想念的一件事是random.randint()函数。我尝试使用Math.random()对自己的randint函数进行编码。该函数运行良好,但问题是有时它输出的值不在给定范围内。

function true_round(num){

    if (Number.isInteger(num)) { return num; }

    let [before, after] = String(num).split(".");

    if (Number(after.slice(0, 1)) >= 5) { return Number(before) + 1; }

    else { return Number(before); }

}


function randint(lowerbound, upperbound){

    if (upperbound > 0){ 

        let rand = lowerbound + true_round(upperbound * Math.random());

        if (rand > upperbound){ return upperbound; }

        return rand;

    }

    else if (upperbound <= 0){

        let rand = upperbound + true_round(lowerbound * Math.random())

        if (rand < lowerbound){ return lowerbound; }

        return rand;

    }
}

for (i = 0; i < 100000; i++){ console.log(randint(-2, -1)); }

我希望所有输出都在给定范围内,但有时它给我0。

2 个答案:

答案 0 :(得分:1)

这是您的true_round函数。

尝试true_round(-1.9)会得到0。这是因为在上舍入情况下,您总是加1,即使在-1.9情况下,您需要减去 1。

答案 1 :(得分:1)

您的true_round()存在舍入负数的问题。 参见此处:REPL test

因为当它的-0.6时,您的程序会说0 + 1是因为它的5以上对吗? 要解决此问题,您可以使用Math.round()或代替加1,检查其是否为负数,然后减去一个。

如果您还想获得范围内随机数的一些简短实例,请在此处查看MDN很好的示例:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random(例如:getRandomIntInclusive(min, max) getRandomInt(min, max)