例如我需要最少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()或任何其他简单方式?

===============>>#1 票数: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))

===============>>#2 票数: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?)。

===============>>#3 票数:0 已采纳

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

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

  ask by translate from so

未解决问题?本站智能推荐: