假设以下数字:
local a = 2
local b = 3.1
local c = 1.43
local d = 1.0582
我的目标是将这些数字四舍五入到小数点后两位。结果应分别为:
a = 2.00
b = 3.10
c = 1.43
d = 1.06 or 1.05
显然我明白任何带有十进制零尾的数字都会被舍入。 2.00
将为2
。但我需要将数字作为字符串,并使其在视觉上更具吸引力,我需要这两个小数位。
这是我用来舍入到小数点后两位的函数:
function round(num, numDecimalPlaces)
local mult = 10^(numDecimalPlaces or 0)
return math.floor(num * mult + 0.5) / mult
end
这适用于测试用例c
和d
,但使用a
和b
会产生错误的结果:它不会填满零。我理解这是因为舍入函数接受数字并计算它们 - 因此多余的零被切断。
但这不是我的目标 - 不会削减它们。
我已经尝试过字符串操作,检查.
是否在某个数字中的位置和位置,但根本不是 。。我的方法:
local zei
if i < 100 then
if tostring(i):find("%.") == nil then
zei = round(i, 2) .. ".00" --No decimal point found, append .00
else
zei = round(i, 2) --Found decimal point, round to 2
end
if tostring(i):find("%.")+2 == tostring(i):len() then
zei = round(i, 2) .. "0" --Found point, but only one trailing number, append 0
end
else
zei = round(i, 0) --Number is over 100, no decimal points needed
end
上述100
案例仅适用于美学而且与此无关。其中zei
是显示的字符串,而i
是其中一个测试案例号。
如何将一个数字舍入到两个小数位,但是附加尾随零,即使它们是多余的,例如2.30
?我知道我需要字符串。
答案 0 :(得分:4)
你不会围绕数字。您可以创建这些数字的字符串表示形式。这将由string.format
以适当的格式完成。像这样:
string.format("%.2f", a);