function getRandomInt (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
感谢 Ionuț G. Stan 在这里的帮助。
我想知道是否可以使用crypto.getRandomValues()在指定范围内生成一个更好的随机数,而不是使用Math.random()。我想要生成一个包括0到10在内的数字,或者0到1之间的数字,甚至是包括10到5000在内的数字。
你会注意到,Math.random()产生的数字是这样的: 0.8565239671015732。
getRandomValues API可能会返回以下内容:
Uint8Array(1)
生成231Uint16Array(1)
生成54328Uint32Array(1)
生成355282741
那么如何将其转换回十进制数,以便我可以使用上面相同的范围算法?还是说我需要一个新的算法?
这是我尝试过的代码,但效果不太好。
function getRandomInt(min, max) {
// Create byte array and fill with 1 random number
var byteArray = new Uint8Array(1);
window.crypto.getRandomValues(byteArray);
// Convert to decimal
var randomNum = '0.' + byteArray[0].toString();
// Get number in range
randomNum = Math.floor(randomNum * (max - min + 1)) + min;
return randomNum;
}
在低端范围(范围为0-1)内,它返回的0比1更多。如何使用getRandomValues()来实现最佳效果?
非常感谢