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

馋奶兔 提交于 2020-02-12 00:29:36

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

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

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

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!