【懒人精灵】生成随机小数或整数的两种方法,go语言混合开发

Lua生成随机小数和整数

-- 生成随机小数
function randomFloat(min, max, decimals)
    -- 设置默认保留1位小数
    decimals = decimals or 1
    -- 生成一个范围在[min, max]之间的随机浮点数
    local randomValue = min + math.random() * (max - min)
    -- 计算四舍五入的倍数
    local multiplier = 10 ^ decimals
    -- 四舍五入到指定小数位
    local roundedValue = math.floor((randomValue * multiplier) + 0.5) / multiplier
    return roundedValue
end

-- 生成一个范围在[min, max]之间的随机整数
function random(min, max)
    return math.random(min, max)
end

可以把这两个函数,合并成一个通用函数。自动根据参数类型,生成随机小数或整数。接下来使用go实现:

Go生成随机小数和整数

// Random 生成随机数函数
// 参数:
//   min: 最小值(可以是整数或浮点数)
//   max: 最大值(可以是整数或浮点数)
//   decimals: 可选参数,保留小数位数(仅当返回浮点数时有效,默认为2)
// 返回值:
//   当min和max都是整数时返回整数
//   当min或max是浮点数时返回保留指定小数位的浮点数
//   当decimals为nil时,浮点数默认保留2位小数
func Random(min, max interface{}, decimals ...interface{}) float64 {
    // 将参数转换为float64
    minFloat, err1 := toFloat64(min)
    maxFloat, err2 := toFloat64(max)

    if err1 != nil || err2 != nil {
        return 0
    }

    // 生成随机数
    rand.Seed(time.Now().UnixNano())
    randomValue := minFloat + rand.Float64()*(maxFloat-minFloat)

    // 判断是否需要返回整数
    isIntMin, _ := isInt(min)
    isIntMax, _ := isInt(max)

    if isIntMin && isIntMax {
        // 如果都是整数,返回整数
        return float64(rand.Intn(int(maxFloat-minFloat+1))) + minFloat
    }

    // 处理小数位数
    decimalPlaces := 2 // 默认保留2位小数
    if len(decimals) > 0 {
        if d, ok := decimals[0].(float64); ok {
            decimalPlaces = int(d)
        } else if d, ok := decimals[0].(int); ok {
            decimalPlaces = d
        }
    }

    // 四舍五入到指定小数位
    multiplier := math.Pow(10, float64(decimalPlaces))
    roundedValue := math.Floor((randomValue*multiplier)+0.5) / multiplier

    return roundedValue
}

// toFloat64 将任意类型转换为float64
func toFloat64(v interface{}) (float64, error) {
    switch val := v.(type) {
    case int:
        return float64(val), nil
    case int64:
        return float64(val), nil
    case float32:
        return float64(val), nil
    case float64:
        return val, nil
    case string:
        return strconv.ParseFloat(val, 64)
    default:
        return 0, errors.New("无法转换为float64")
    }
}

// isInt 判断值是否为整数
func isInt(v interface{}) (bool, error) {
    switch val := v.(type) {
    case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:
        return true, nil
    case float32:
        return val == float32(int(val)), nil
    case float64:
        return val == float64(int(val)), nil
    default:
        return false, nil
    }
}
1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】生成随机小数或整数的两种方法,go语言混合开发

企业级大数据智能营销管理系统

源码转让