我是一名学习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。
答案 0 :(得分:1)
这是您的true_round函数。
尝试true_round(-1.9)会得到0。这是因为在上舍入情况下,您总是加1,即使在-1.9情况下,您需要减去 1。
答案 1 :(得分:1)
您的true_round()
存在舍入负数的问题。
参见此处:。
因为当它的-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)
)