JS 随机数(随机数 小数)

之前在网上看了一些其他的文章,没找到直接取[n,m] 两个都是小数的区间随机值,所以自己写了一个

说明:

  1. minmax 可以输入整数或者小数。
  2. decimal:不输入或者输入为零的时候,小数部分的最大位数是 minmax 小数部分最大的位数。例如:randomNum(0, 6.88, 0) 小数部分最大值是99,例如2.99,如果输入的话,则会根据 minmax 还有 decimal 三者来判定最大位数。
  3. 如果想随机整数值, minmax 输入整数, 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)}`)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值