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

时间:2014-04-20 01:53:26

标签: 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()或任何其他简单的方法吗?

3 个答案:

答案 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)

你做不到。您可以达到的最大值 - 指定浮点精度或数字编号,但您不能强制输出就像您的示例。 Lua使用类似于printf的C,几乎没有限制reference。在这里查看完整说明符列表link。记住不支持的。

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