【发布时间】:2017-05-22 21:06:36
【问题描述】:
例如,给定 78.689 或 1.12 中的任意数字,我正在寻找的是以编程方式将数字四舍五入到小数点后最接近的第十位。
我正在尝试在有一个 math.floor() 函数四舍五入到最小整数的环境中执行此操作,据我从文档中可以看出,没有什么能像 PHP 的 round() 函数那样。
【问题讨论】:
-
string.format("%.1f", percent * 100)
例如,给定 78.689 或 1.12 中的任意数字,我正在寻找的是以编程方式将数字四舍五入到小数点后最接近的第十位。
我正在尝试在有一个 math.floor() 函数四舍五入到最小整数的环境中执行此操作,据我从文档中可以看出,没有什么能像 PHP 的 round() 函数那样。
【问题讨论】:
string.format("%.1f", percent * 100)
有简单的 sn-p 在: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 为负数时会出现异常,但该页面上有更多示例。
【讨论】:
您可以使用强制来执行此操作... 它就像 printf 一样工作......你可以尝试在这个 sn-p 中做类似的事情。
value = 8.9756354
print(string.format("%2.1f", value))
-- output: 9.0
【讨论】:
考虑到这是 roblox,将其设为全局变量会比制作单个模块或创建自己的 gloo 更容易。
_G.round = function(x, factor)
local factor = (factor) and (10 ^ factor) or 0
return math.floor((x + 0.5) * factor) / factor
end
【讨论】:
在我的例子中,我只是想用一个字符串表示这个数字......但是,我想这个解决方案也可以对其他人有用。
string.sub(tostring(percent * 100), 1, 4)
因此,要将其恢复为数字表示,您只需在结果数字上调用 tonumber()。
【讨论】: