例如,我需要最少3位的数字
"512" --> 512
"24" --> 24.0
"5" --> 5.00
一个选项是写小功能。在这里使用答案我的情况将是这样的
function f(value, w)
local p = math.ceil(math.log10(value))
local prec = value <= 1 and w - 1 or p > w and 0 or w - p
return string.format('%.' .. prec .. 'f', value)
end
print(f(12, 3))
但是可能只使用string.format()或任何其他简单的方法吗?
答案 0 :(得分:2)
好吧,看来这种情况超出了string.format的力量。感谢@Schollii,这是我目前的变种
function f(value, w)
local p = math.ceil(math.log10(value))
local prec = value <= 1 and w - 1 or p > w and 0 or w - p
return string.format('%.' .. prec .. 'f', value)
end
print(f(12, 3))
答案 1 :(得分:1)
由于string.format
使用printf
减去一些代码(例如*
,这将简化我在下面提供的解决方案),因此没有专门针对此的格式代码。所以你必须自己实现,例如:
function f(num, w)
-- get number of digits before decimal
local intWidth = math.ceil(math.log10(num))
-- if intWidth > w then ... end -- may need this
local fmt='%'..w..'.' .. (w-intWidth) .. 'f'
return string.format(fmt, num)
end
print(f(12, 4))
print(f(12, 3))
print(f(12, 2))
print(f(512, 3))
print(f(24, 3))
print(f(5, 3))
您应该处理整数部分不适合给定的字段宽度(返回ceil或floor?)的情况。
答案 2 :(得分:0)