WoW-在Lua中舍入到小数点后两位

BWa*_*yne 2 lua world-of-warcraft

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

这是我所拥有的:

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
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*yer 5

local formatted = string.format(
   "%.2f %%",
   UnitXP('player') / UnitXPMax('player') * 100
)
Run Code Online (Sandbox Code Playgroud)

这是Lua的标准方法,对您同样适用。除非WoW删除了该功能,否则这将是愚蠢的。

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


string.format手册中所述,将格式字符串作为其第一个参数,然后是要拼接为格式字符串的一系列值。

除了以开头的特殊标记外,格式字符串通常会按原样处理%。附加参数的数量应等于格式字符串中这些标记的数量。

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

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

从左到右:

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

因此,结果将是 xx2.26

最后,由于%在格式字符串中具有特殊含义,因此,如果要使用文字%,则必须改为编写%%

因此,“%。2f %%”表示:

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