MathUtil.lua 1.47 KB
-- 初始化
function math.randomInit(seed)
	seed = seed or skynet.timex()
	math.randomseed(tonumber(tostring(seed):reverse():sub(1,6)))
end

-- 随机浮点数
function math.randomFloat(lower, greater)
    return math.min(lower, greater) + math.random()  * math.abs(greater - lower);
end

function math.randomInt(lower, greater)
	return math.random(math.min(lower, greater), math.max(lower, greater))
end

-- 根据权重值从数据集合里面随机出
-- @param dataset	数据集合
-- @param field 	权重域
function math.randWeight(dataset, field)
	if not dataset then return nil end

	field = field or "weight"

	-- 计算权值总和
	local weightSum = 0
	for key, value in pairs(dataset) do
		weightSum = weightSum + tonumber(value[field])
	end

	local randWeight = math.randomFloat(0, weightSum)
	for key, value in pairs(dataset) do
		if tonumber(value[field]) > 0 then
			if randWeight > tonumber(value[field]) then
				randWeight = randWeight - tonumber(value[field])
			else
				return key
			end
		end
	end

	return nil
end

function math.illegalNum(num, min, max)
	if num == nil then
		return true
	end
	if type(num) ~= "number" then
		-- 非数字类型
		return true
	end
	if num ~= num then
		-- 非法数字nan
		return true
	end
	if num ~= math.floor(num) then
		-- 非整数
		return true
	end
	if num < min or num > max then
		return true
	end
	-- if string.find(tostring(num), '%.') then
	-- 	-- 确保不会出现类似1.0这样的数据
	-- 	return true
	-- end
	return false
end