Discord js中范围内的随机数生成器



我正试图为我的Discord机器人制作一个命令,该命令返回一个范围内的随机数,但例如,在20到40的范围内,它总是返回一个小于20的数字。

这是我的代码:

module.exports = {
name: 'losowanie',
description: 'losowy numer',
execute(message, args, cmd, client, Discord) {
const splited = message.content.trim().split(' ');
const min = splited[1];
const max = splited[2];
if (!min) {
message.channel.send(`brak wartosci minimalnej`);
return;
}
if (!max) {
message.channel.send(`brak wartosci maksymalnej`);
return;
}
if (isNaN(min)) {
message.channel.send(`wartośc minimalna musi być liczbą`);
return;
}
if (isNaN(max)) {
message.channel.send(`wartośc maksymalna musi być liczbą`);
return;
}
if (min >= max) {
message.channel.send(
`wartość minimalna nie może być wieksza/równia aniżeli maksymalna`,
);
return;
}
message.channel.send(Math.floor(Math.random() * (max - min) + min));
}
};

问题是minmax是字符串。

Math.random()返回一个小于1的数字,然后将其乘以20(max-min(,现在它是一个介于0和20之间的数字。但是当您想要添加min值(在您的情况下是一个字符串(时,JavaScript将连接,因为它不是一个数字,所以它将把0到20之间的随机数转换为一个字符串,并将字符串"20"添加到它的末尾,如本例所示:

const min = '20'
const max = '40'
const random = Math.random()
console.log({
'max-min': max - min,
'Math.random()*(max-min)': random * (max - min),
'Math.random()*(max-min)+min': random * (max - min) + min
})

您需要将最小值和最大值转换为数字:

const min = Number(splited[1])
const max = Number(splited[2])
// OR
const min = parseInt(splited[1], 10)
const max = parseInt(splited[2], 10)

两者都会很好用。

const min = Number('20')
const max = Number('40')
console.log(Math.floor(Math.random()*(max-min)+min))

最新更新