之前在网上看了一些其他的文章,没找到直接取[n,m]
两个都是小数的区间随机值,所以自己写了一个
说明:
min
和max
可以输入整数或者小数。decimal
:不输入或者输入为零的时候,小数部分的最大位数是min
和max
小数部分最大的位数
。例如:randomNum(0, 6.88, 0)
小数部分最大值是99
,例如2.99
,如果输入的话,则会根据min
和max
还有decimal
三者来判定最大位数。- 如果想随机整数值,
min
和max
输入整数,decimal
不输入或者为零都可以,例如:randomNum(1, 9, 0)
或者randomNum(1, 9)
function randomNum(min = 0, max = 0, decimal=0) {
let min_z = Math.trunc(min); // 最小值的整数部分
let max_z = Math.trunc(max); // 最大值的整数部分
// 判断是否存在小数部分,不存在的话为0
let min_x = isNaN(getDecimalNum(min)) ? 0 : getDecimalNum(min); // 最小值的小数部分
let max_x = isNaN(getDecimalNum(max)) ? 0 : getDecimalNum(max); // 最大值的小数部分
// 区分有小数和没小数的情况
if (min_x > 0 || max_x > 0 || decimal > 0) {
// 整数部分随机数
let z = parseInt(Math.random() * (max_z - min_z + 1) + min_z, 10);
// 小数部分随机数
let x = 0;
// 小数部分随机数最大位数
let max_decimal = min_x.toString().length > max_x.toString().length ? min_x.toString().length : max_x.toString().length;
max_decimal = decimal > max_decimal ? decimal : max_decimal;
// 判断随机出的整数部分,是否等于最小值或者最大值
if(z == min_z || z == max_z){
if(z == min_z){
// 整数部分随机数等于最小值,那么应该从最小值的小数部分开始,到小数位数的最大值随机就可以
x = parseInt(Math.random() * (Math.pow(10, max_decimal) - min_x) + min_x, 10);
}else{
// 整数部分随机数等于最大值,那么应该从0开始,到最大值小数部分
x = parseInt(Math.random() * (max_x + 1), 10);
}
}else{
// 整数部分在最大最小值区间的,就从0到小数位数的最大值随机就可以
x = parseInt(Math.random() * (Math.pow(10, max_decimal)), 10);
}
return Number(`${z}.${x}`);
} else {
return parseInt(Math.random() * (max_z - min_z + 1) + min_z, 10);
}
}
// 获取数值的小数部分
function getDecimalNum(data){
return Number(data.toString().split('.')[1]);
}
//使用
console.log(`随机数是:${randomNum(0, 6.8, 2)}`)