Lua math数学函数库 对于取整存在误差的情况(例如math.modf())

今天在做项目时有个需要将编号转换成二维数组序号的需求,代码如下:

function UIMineClearance:CalculatePosByIndex(rIndex) -- 输入一个编号 返回一个10 * 10 数组的下标
    local lX , lY = math.modf(rIndex / 10)
    lY = math.floor(lY * 10)
    return lX + 1,math.ceil(lY) + 1
end

然后我发现有些结果往往和预期不同,我疯狂的打印每一步的变量(脚本语言不能进行调试是真的难受),最终让我揪出个大问题,math.modf() 函数有误差。为了证实我的想法,我单独打印了一下测试的值。

	local a,b = math.modf(12/10)
    print(a,b)
    print(math.floor(b * 10))

math.modf(x)方法是返回两个值,第一个值是浮点类型x的整数部分,第二个值是浮点类型x的小数部分。
打印如下:

看到没有,最坑的来了,经过math.floor()的向下取整后 发现竟然变成了1,说明modf方法 在返回第二个值的时候是有误差的 应该是 0.1999999999 所以最终我将小数处理前乘上100在进行运算 尽量规避误差。最终代码:

function UIMineClearance:CalculatePosByIndex(rIndex)
    local lX , lY = math.modf(rIndex / 10)
    lY = math.modf(lY * 100)/10
    return lX + 1,math.ceil(lY) + 1
end

希望其他的小伙伴遇到能够尽早知道这个坑。

我还是只菜鸟,如果文中有说的不对的地方,欢迎各位多多指点。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值