Lua - 如何将小数向下舍入到一半?

3

我正在使用这个函数来进行四舍五入:

function round(val, decimal)
  if (decimal) then
    return math.floor( (val * 10^decimal) + 0.5) / (10^decimal)
  else
    return math.floor(val+0.5)
  end
end

这个函数运行良好,但当数字落在.5时,如5.5或1000.5或7.5,我需要将其向下舍入而不是向上。我需要修改这个函数来实现这个目标吗?

2个回答

7
function round(val, decimal)
  local exp = decimal and 10^decimal or 1
  return math.ceil(val * exp - 0.5) / exp
end

1
好的,那看起来比我的代码更简洁,而且运行速度也稍微快一些。 - W.B.
两种方法都可以,但是这个更简洁,打字量也少得多(当然,它也能正常工作)。所以我会接受这个。 - Mark Kramer
我真的很想知道这是如何工作的,因为我一点都不清楚。 - Mark Kramer

2
function round(val, decimal)
  local rndval = math.floor(val)
  local decval = val - rndval
  if decimal and decimal ~= 0 then
    decval = decval * 10 ^ decimal
    return rndval + (decval % 1 > 0.5 and math.ceil(decval) or math.floor(decval)) / 10 ^ decimal
  else
    return decval > 0.5 and rndval + 1 or rndval 
  end
end

我的懒惰做法。没有访问解释器进行测试,但应该没问题。不知道性能是否可以...

编辑: 在LuaJIT上,对该函数的十亿次调用需要约半秒钟。在普通Lua上,每半秒钟执行一百万次调用(Core i7/3610移动版)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接