[英]Format string to number with minimum length in lua
例如我需要最少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()或任何其他简单方式?
好的,似乎这种情况超出了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))
没有专门的格式代码,因为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?)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.