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

Posted

技术标签:

【中文标题】如何四舍五入到最接近的十分位?【英文标题】:How to Round to the Nearest Tenth? 【发布时间】:2017-05-22 21:06:36 【问题描述】:

例如,给定 78.689 或 1.12 中的任意数字,我正在寻找的是以编程方式将数字四舍五入到小数点后最接近的第十位。

我正在尝试在有一个 math.floor() 函数四舍五入到最小整数的环境中执行此操作,据我从文档中可以看出,没有什么能像 phpround() 函数那样。

【问题讨论】:

string.format("%.1f", percent * 100) 【参考方案1】:

有简单的 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 为负数时会出现异常,但该页面上有更多示例。

【讨论】:

【参考方案2】:

您可以使用强制来执行此操作... 它就像 printf 一样工作......你可以尝试在这个 sn-p 中做类似的事情。

value = 8.9756354
print(string.format("%2.1f", value))
-- output: 9.0

【讨论】:

【参考方案3】:

考虑到这是 roblox,将其设为全局变量会比制作单个模块或创建自己的 gloo 更容易。

_G.round = function(x, factor) 
    local factor = (factor) and (10 ^ factor) or 0
    return math.floor((x + 0.5) * factor) / factor
end

【讨论】:

关于 Roblox,_G 现在已弃用,平台现在建议在 ModuleScripts 中存储供全局使用的函数。这可以通过将函数存储在导入模块脚本时返回的表中来实现,或者简单地返回函数本身。【参考方案4】:

在我的例子中,我只是想用一个字符串表示这个数字......但是,我想这个解决方案也可以对其他人有用。

string.sub(tostring(percent * 100), 1, 4)

因此,要将其恢复为数字表示,您只需在结果数字上调用 tonumber()

【讨论】:

以上是关于如何四舍五入到最接近的十分位?的主要内容,如果未能解决你的问题,请参考以下文章

如何四舍五入到最接近的偶数?

在 PySpark 中,如何将时间戳值四舍五入到最接近的分钟?

如何将双精度格式设置为四舍五入到最接近的美元的货币?

四舍五入正确到小数点后 2 位,但如果非常接近,则将其设置为最接近的整数

在R中将时间四舍五入到最接近的小时[重复]

Pandas - 将时间戳四舍五入到最接近的秒数