如何四舍五入到最近的十分位?

8

假设有任意一个数字,比如78.689或1.12,我想通过编程将该数字四舍五入到小数点后最近的一位。

我正在尝试在一个只有math.floor()函数可以将数字向下取整的环境中完成这个任务,但根据文档显示,没有类似于PHP的round()函数。


2
string.format("%.1f", percent * 100) - Egor Skriptunoff
4个回答

11

这里有一个简单的片段:http://lua-users.org/wiki/SimpleRound

function round(num, numDecimalPlaces)
  local mult = 10^(numDecimalPlaces or 0)
  return math.floor(num * mult + 0.5) / mult
end

当numDecimalPlaces为负数时,它会表现异常,但该页面有更多的例子。


4
您可以使用强制转换来实现这一点...它的工作方式就像printf一样...您可以尝试像这个片段中那样做。
value = 8.9756354
print(string.format("%2.1f", value))
-- output: 9.0

1
考虑到这是Roblox,将其作为全局变量会更容易,而不是创建单个模块或自己创建gloo。
_G.round = function(x, factor) 
    local factor = (factor) and (10 ^ factor) or 0
    return math.floor((x + 0.5) * factor) / factor
end

1
关于Roblox,_G现已被弃用,平台现在建议将全局使用的函数存储在ModuleScripts中。这可以通过将函数存储在表格中并在导入模块脚本时返回该表格,或者仅返回函数本身来实现。 - Jeremy Ahn

0
在我的情况下,我只是试图制作这个数字的字符串表示形式... 不过,我想这个解决方案也可能对其他人有用。
string.sub(tostring(percent * 100), 1, 4)

因此,为了将其转换为数字表示形式,您可以在结果数字上简单地调用tonumber()


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