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

029dc808-4d20-439b-baf8-0d6ab97bbb18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四夕立羽

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值