我正在尝试以四舍五入到小数点后两位的百分比显示我的总经验值。我想出了一个解决方案,但它很笨拙。必须有更好的方法。
这是我所拥有的:
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
同样,这确实是我想要的,但是有没有更漂亮的方法可以做到这一点?
local formatted = string.format(
"%.2f %%",
UnitXP('player') / UnitXPMax('player') * 100
)
这是标准的Lua方法,也应该适合你。 除非魔兽世界删除了该功能,那将是愚蠢的。
请注意,type(formatted)
是字符串,而不是数字。
string.format
,如手册中所述,将格式字符串作为其第一个参数,后跟要拼接到格式字符串中的一系列值。
格式字符串将主要按字面处理,但以%
开头的特殊标记除外。其他参数的数量应等于格式字符串中这些标记的数量。
在上面的例子中,%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
的第二个参数必须是数字,否则函数将出错。
这是一个灵活的函数,可以四舍五入到不同的位置。我用负数、大数、小数和各种边缘情况对其进行了测试,它既有用又可靠:
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
已经有一个很好的答案,但我不确定你为什么要提取尾数,只需在整数上执行你对尾数所做的操作:乘以 100,通常四舍五入(或地板(,然后除以 100。
如果有帮助,您还可以查看并编写为:除以 0.01(您想要的精度(然后四舍五入,然后再次乘以 0.01。
Lua 没有圆形,但要使用 floor 作为圆形函数,只需使用 floor( x + 0.5 (
虽然有级别百分比,但您可能更喜欢地板,因为将 0.995 显示为 100% 会误导。