import { mathCeil, mathFloor, mathMax, mathMin, mathRandom } from './internals/native';
import toFinite from './toFinite';
/**
* 产生一个包含 `lower` 与 `upper` 之间的随机整数。
*
* 如果参数非整数 `lower=Math.ceil(lower)` `upper=Math.floor(upper)`。如果 `lower` 大于 `upper` 会自动交换参数。
*
* @alias module:Number.randomInt
* @since 1.0.0
* @param {number} [lower=0] 下限。默认 `0`。
* @param {number} [upper=1] 上限。默认 `1`。
* @returns {number} 随机整数。
* @example
*
* // 0 到 1 之间的整数
* randomInt(); // 1
*
* // 2 到 4 之间的整数
* randomInt(2, 4); // 4
*
* // 2 到 4 之间的整数
* randomInt(4, 2); // 3
*
* // 区间只有一个整数
* randomInt(1.2, 2.4); // 2
*
*/
function randomInt(lower = 0, upper = 1) {
lower = toFinite(lower);
upper = toFinite(upper);
let min = mathCeil(mathMin(lower, upper) || 0);
let max = mathFloor(mathMax(lower, upper) || 0);
// 如果两个值都是整数位相同,浮点数不同, 大小值的可能会互换。(如 1.2, 1.3)
if (min > max) {
// [min, max] = [max, min]
const temp = min;
min = max;
max = temp;
}
return mathFloor(min + mathRandom() * (max - min + 1));
}
export default randomInt;