/** * this util module is about to provide number support utils * @module angle-util/numberUtil */ export default { // 保留n位小数并四舍五入,不自动补0 // NOTE 同toFixed()最大区别在于不自动补0,并且返回数字类型 round (num: number, n: number = 0): number { let result: number = Math.round(num * Math.pow(10, n)) / Math.pow(10, n) if (result === 0) { return 0 } else { return result } }, /** * 生成随机数 * @author youngbeen * @param { integer } [diceLimit] - 生成的随机数上限值(包含该值),默认为9,不能传入0! * @param { integer } [diceBase] - 生成的随机数下限值(包含该值),默认为0 * @return { integer } 生成的随机数 * @example * console.log(numberUtil.random()) // '默认生成0~9的随机数(包含0和9)' * console.log(numberUtil.random(3)) // '生成0~3的随机数(包含0和3)' * console.log(numberUtil.random(3, 1)) // '生成1~3的随机数(包含1和3)' * console.log(numberUtil.random(3, 6)) // '传入了错误的下限值,将生成3~3的随机数(即永远返回3)' */ random (diceLimit: number = 9, diceBase: number = 0): number { // 起始点默认为0,最高点默认为9 // 若起始点比最高点还高的情况,修正为起始点等于最高点 diceBase > diceLimit ? diceBase = diceLimit : diceBase let diceEnd: number = diceLimit - diceBase + 1 let myRoll: number = Math.floor(Math.random() * diceEnd) + diceBase return myRoll }, /** * 批量生成随机数 * @author youngbeen * @param { integer } [diceNum] - 生成随机数个数,默认生成2个 * @param { integer } [diceLimit] - 生成的随机数上限值(包含该值),默认为9 * @param { integer } [diceBase] - 生成的随机数下限值(包含该值),默认为0 * @param { boolean } [isDuplicate] - 生成的随机数是否可重复,默认false不重复 * @return { array } 生成的随机数数组 * @example * console.log(numberUtil.multiRandom()) // '默认生成2个随机数,生成区间0~9(包含0和9),随机数不重复,例如返回[3, 9]' * console.log(numberUtil.multiRandom(5)) // '生成5个随机数,生成区间0~9(包含0和9),随机数不重复,例如返回[3, 9, 0, 2, 8]' * console.log(numberUtil.multiRandom(3, 6, 1)) // '生成3个随机数,生成区间1~6(包含1和6),随机数不重复,例如返回[3, 1, 5]' * console.log(numberUtil.multiRandom(8, 6, 1, true)) // '生成8个随机数,生成区间1~6(包含1和6),随机数可重复,例如返回[3, 1, 5, 2, 3, 6, 2, 5]' */ multiRandom (diceNum: number = 2, diceLimit: number = 9, diceBase: number = 0, isDuplicate: boolean = false): Array { // 默认生成2个随机数,起始点默认为0,最高点默认为9,默认不允许重复 let generatedDices: Array = [] for (let i: number = 0; i < diceNum; i++) { // 循环生成随机数 let dice: number = this.random(diceLimit, diceBase) if (!isDuplicate && generatedDices.indexOf(dice) !== -1) { // 不允许重复,而且已经确定重复的情况 // 不加入结果,撤销自增 i-- } else { // 合法的dice,放入数组 generatedDices.push(dice) } } // 测试检验用,看生成的dice数量是否达标 if (generatedDices.length !== diceNum) { console.warn('Error: wrong random result counts in multiRandom()@NumberUtil') } return generatedDices } }