Lua:小数精度计算,几位数判断,四舍五入,最靠近5倍数取整

math.modf

当我们调用该函数时,该函数返回两个值,第一个值是数字的整数值,第二个返回值是数字的小数值(如果有的话)

math.floor

向下取整
ua 中的math.floor函数是向下取整函数。
math.floor(5.123)  – 5
math.floor(5.523)   – 5
用此特性实现四舍五入
math.floor(5.123 + 0.5)  – 5
math.floor(5.523 + 0.5)  – 6
也就是对math.floor函数的参数进行 “+ 0.5” 计算

小数精度截取

	--获取准确小数
	-- num 源数字
	--n 位数
	function GetPreciseDecimal(num, n)
		if	type(num) ~= "number" then
			return num
		end
		n = n or 0
		n = math.floor(n)
		if	n < 0 then n = 0 end
		local decimal = 10 ^ n
		local temp = math.floor(num * decimal)
		return = temp / decimal
	end

获取一个数的位数

function GetNumDigit(num)
    local result = num
    local digit = 0
    while(result > 0) do
        result =math.modf(result / 10)
        digit = digit +1
    end
    return digit
end

整数4舍6入,5保留

例如从第二位开始算

function GetNumDigit(num)
    local result = num
    local digit = 0
    while(result > 0) do
        result =math.modf(result / 10)
        digit = digit +1
    end
    return digit
end

local num =690

local digit = GetNumDigit(num)
print("digit:" .. digit)
local digit2 = digit - 2
print("digit2:" .. digit2)
local ten = 10 ^ digit2
print(" ten:" ..  ten)
local qianLiangWei = math.modf(num / ten)
print("qianLiangWei:" .. qianLiangWei)

local qianLiangWeiXiaoShu = qianLiangWei/10
local qianLiangWeiXSZ,qianLiangWeiXSX =math.modf(qianLiangWeiXiaoShu)
print(qianLiangWeiXSZ .. "-->" .. qianLiangWeiXSX)

function ShiSheLiuRu(XiaoShu,XiaoPart)
	if XiaoPart == 0.5 then
		return XiaoShu
	else
		return 	round(XiaoShu)
	end
end


--四舍五入
function round(value)
    value = tonumber(value) or 0
    return math.floor(value + 0.5)
end


local qianLiangWei5BeiShu = ShiSheLiuRu(qianLiangWeiXiaoShu,qianLiangWeiXSX)
print(qianLiangWei5BeiShu)

local finial = qianLiangWei5BeiShu * ten * 10
print (finial)

--输出
digit:3
digit2:1
 ten:10
qianLiangWei:69
6-->0.9
7
700

整数最靠近5的倍数

function GetDengJiZhengByNear5(num)
    local geWei = num % 10
	local zhengPart,xiaoPart = math.modf(num/10)
	local xiaoShu = num/10
    if geWei <= 2 then
        return zhengPart *10
    elseif geWei >= 3 and geWei <= 7 then
        return zhengPart *10 + 5
    elseif geWei >= 8 then

        return round(xiaoShu) * 10
    end
end

--四舍五入
function round(value)
    value = tonumber(value) or 0
    return math.floor(value + 0.5)
end


num = 59
print(GetDengJiZhengByNear5(num))

输出
60

你可能感兴趣的:(Unity3d+Lua开发,lua,四舍五入,小数精度截取,最靠近5的倍数,几位数)