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

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

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

【问题讨论】:

  • string.format("%.1f", percent * 100)

标签: lua rounding roblox


【解决方案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()。

      【讨论】:

        猜你喜欢
        • 2017-02-11
        • 2011-11-06
        • 2014-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多