繁体   English   中英

将字符串格式化为最小长度为lua的数字

[英]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?)。

你不能 您可以达到的最大值-指定浮点精度或位数,但是您不能强制输出像您的示例一样。 Lua使用C之类的printf,几乎没有限制参考 在这里查看完整的说明符列表链接 记住不支持的。

编写函数将是最好且唯一的解决方案,尤其是当您的任务看起来很奇怪时,因为它不计算小数点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM