【问题标题】:WoW - rounding to two decimal places in LuaWoW - 在 Lua 中四舍五入到小数点后两位
【发布时间】:2021-06-10 22:03:07
【问题描述】:

我正在尝试将我的总经验值显示为四舍五入到小数点后两位的百分比。我想出了一个解决方案,但它很笨拙。一定有更好的方法。

这是我所拥有的:

local xpPercentage = (((UnitXP("player") / UnitXPMax("player"))*100))
-- 63.4587392473
local xpMantissa = xpPercentage - floor(xpPercentage)
-- .4587392473
local xpTwoDec = (floor(xpMantissa * 100)/100) + floor(xpPercentage)
-- 63.45

再一次,这就是我想要的,但是有没有更漂亮的方法呢?

【问题讨论】:

    标签: lua world-of-warcraft


    【解决方案1】:
    local formatted = string.format(
       "%.2f %%",
       UnitXP('player') / UnitXPMax('player') * 100
    )
    

    这是标准的 Lua 方法,它也应该适合你。 除非魔兽世界把那个功能去掉了,不然就傻了。

    注意type(formatted) 是字符串,而不是数字。


    string.format,如manual 中所述,将格式字符串作为其第一个参数,后跟一系列要拼接到格式字符串中的值。

    除了以% 开头的特殊标记外,格式字符串将主要按字面意思处理。附加参数的数量应等于格式字符串中这些标记的数量。

    在上面的示例中,%f 表示“在此处插入浮点数”;例如,string.format("hello %f world", 5.1") 将返回“hello 5.1 world”。在% 之后和f 之前添加内容,您可以告诉它如何格式化。

    这是一个使用所有选项的示例:string.format("%x6.2f", 2.264)

    从左到右:

    • % 标志着开始
    • x 告诉它用 xs
    • 向右填充
    • 6 告诉它整个内容应该是 5 个字符长
    • .2 告诉它四舍五入(或用 0 填充)到小数点后 2 位

    所以,结果将是xx2.26

    最后,由于 % 在格式字符串中具有特殊含义,如果您想要文字 %,则必须改写 %%

    "%.2f %%" 因此意味着:

    浮点数,四舍五入或填充到小数点后 2 位,后跟一个空格和一个百分号。 format 的第二个参数必须是数字,否则函数会出错。

    【讨论】:

    • 所有好的答案。感谢大家。我是 Lua 的新手,所以我仍在努力学习曲线,以便直接在脑海中学习这些东西。作为奖励,你能给我解释一下“%.2f %%”的语法吗?
    • @BWayne 当然;)
    • 太棒了。这非常有帮助。非常感谢!
    【解决方案2】:

    这是一个灵活的函数,可以四舍五入到不同的位置。我用负数、大数、小数和各种边缘情况对其进行了测试,它有用且可靠:

    function Round(num, dp)
        --[[
        round a number to so-many decimal of places, which can be negative, 
        e.g. -1 places rounds to 10's,  
        
        examples
            173.2562 rounded to 0 dps is 173.0
            173.2562 rounded to 2 dps is 173.26
            173.2562 rounded to -1 dps is 170.0
        ]]--
        local mult = 10^(dp or 0)
        return math.floor(num * mult + 0.5)/mult
    end
    

    【讨论】:

      【解决方案3】:

      已经有一个很好的答案,但我不确定你为什么要提取尾数,只需对整数执行你对尾数所做的操作:乘以 100,通常取整(或取整),然后除以 100 .

      如果有帮助,您还可以查看并写成:除以 0.01(您想要的精度)然后四舍五入,然后再乘以 0.01。

      Lua 没有圆形,但要使用 floor 作为圆形函数,只需使用 floor( x + 0.5 )
      尽管使用水平百分比,但您可能更喜欢底线,因为将 0.995 显示为 100% 会产生误导。

      【讨论】:

      • “除以 0.01”乘以 100 会“快很多”,至少在纸面上是这样(IRL 都快到你不会注意到差异),而且它也更容易阅读,所以我看不出你为什么要除以分数
      • 好吧,这对计算机来说并不重要,我想暗示您也可以将此方法用于其他分数,例如到 0.05 的倍数(瑞士货币已经淘汰了小于 5 Rappen = 0.05 Franken 的硬币)甚至不是 1 的分数的疯狂分数,因此它们会将整数四舍五入为非整数。
      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 2012-05-09
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多