js 抢红包场景

核心是实际业务场景问题和精度控制问题

class RedPackage {
    constructor(money, num) {
        this._money = money
        this._num = num
    }

    getRandomMoney () {
        if(this._num === 1) return this._money
        const mm = parseInt(((this._money - ((this._num -1) * 0.01)) * Math.random() + 0.01) * Math.pow(10,2)) / Math.pow(10,2)
        return mm
    }

    openPackage() {
        if(this._money < this._num * 0.01) {
            console.log(`也太抠了,金额过小`);
            return
        }
        if(this._num === 0) {
            console.log(`来晚了 红包抢完啦`);
            return
        }
        const rMoney = this.getRandomMoney()
        this._money = parseInt((this._money * Math.pow(10,2) - rMoney * Math.pow(10,2))) / Math.pow(10,2)
        this._num--
        console.log(`手气不错! 抢到的金额为:${rMoney}`)
    }
}

const redPackage = new RedPackage(0.12, 5)
 

redPackage.openPackage() // 输入本次抢到的金额
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值