如何用零填充数字的小数位?

假设有以下数字:

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.061.05

显然,我理解尾随小数零的任何数字都会被四舍五入。2.00将变成2。但是我需要数字作为字符串,并且为了使其在视觉上更具吸引力,我需要这两个小数位。

下面是我用于四舍五入到两个小数位的功能:

function round(num, numDecimalPlaces)
local mult = 10^(numDecimalPlaces or 0)
return math.floor(num * mult + 0.5) / mult
end

这对测试用例cd有效,但将产生ab错误的结果:它不会填充零。我明白这是因为取整函数接受数字并计算它们 - 因此,多余的零会被切掉。

但这正是我目的所在 - 不要切掉它们。

我尝试过字符串操作,通过检查数字中的“.”是否存在以及其位置,但这对任何情况都没有有效。我的方法:

local zei
if i < 100 then
    if tostring(i):find("%.") == nil then
        zei = round(i, 2) .. ".00" --找不到小数点,添加 .00
    else
        zei = round(i, 2) --找到小数点,四舍五入到 2
    end
    if tostring(i):find("%.")+2 == tostring(i):len() then
        zei = round(i, 2) .. "0" --找到一个点,但只有一个尾随数字,添加 0
    end
else
    zei = round(i, 0) --数字超过 100,不需要小数点
end

_以上的 100 情况只是为了美观,与此处无关。_其中zei是显示的字符串,i是测试用例数字之一。

总结

如何将数字四舍五入到两个小数位,但是填充尾随的零,即使它们是多余的,例如2.30?我明白我需要字符串来做到这一点。

矛盾的问题:去掉多余的零

点赞
用户734069
用户734069

你不是要四舍五入数字,而是要创建数字的字符串表示形式。可以使用string.format函数,并选择适当的格式。像这样:

string.format("%.2f", a);
2017-01-02 22:04:31