例如我需要最少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

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

3回复

如何在Lua中格式化长度超过99个字符的字符串

我正在格式化要打印到控制台的字符串,并尝试格式化终端大小。 但是,Lua似乎不允许任何类型的格式超过99个字符。 ( 来源 ) 在终端宽度超过100列的情况下,我还可以填充字符串来使用整行吗? 或打印出正确排列的东西? 我知道我可以用循环来做数学和填充空间,但这感觉效率低下。 还
4回复

在模式中格式化lua中的字符串

我想制作一个脚本,该脚本可以使用任何数字,最多可以计数,然后以格式返回。 像这样 将返回 但是我希望它像这样打印 而且我希望它甚至可以处理9个以上的东西,所以像20这样的东西会像这样 我确定可以使用lua中的字符串库完成此操作,但是我不确定如何使用该库。
2回复

格式化字符串以适合Lua中的模式?

假设我有一个模式和一个字符串: 如何使String匹配Pattern的格式,它变成"ABC - DEF" ?
4回复

找到Lua数字的字符串长度?

这可能是一个简单的问题,但搜索没有找到类似的问题。 #运算符查找字符串的长度,其中包括很好的。 但是由于Lua是动态类型的,因此没有转换运算符,如何将数字作为字符串键入以确定其长度? 例如,假设我想在格式化表格中打印1到9的阶乘。 错误:尝试获取全局“F”的长度(数值)
3回复

如何使用布尔变量格式化lua字符串?

我有一个布尔变量,其值我想在格式化的字符串中显示。 我尝试使用string.format ,但是对于语言参考中列出的任何格式选项,我都会得到类似下面的内容: 我可以通过添加一个tostring来显示布尔值, 但对于这个lua初学者来说,这似乎是间接的。 有没有我忽略的格式化选
1回复

如何在Lua中将ISO 8601持续时间转换为格式化的字符串?

我最近一直在使用Youtube API v3(是的,我知道,这并不适用于Lua),但是当我需要将ISO 8601持续时间转换为格式化字符串时,网络上没有任何帮助。 我一直在各地搜索,以寻找可以帮助解决此类问题的特定库,但是不幸的是,Lua没有任何内容。 除了Lua之外,还有成千上万种其他语言
1回复

lua套接字接收未知长度的字符串

我有一个套接字服务器,它侦听命令并对其进行响应。 响应并不总是相同的长度。 在python中,即使来自服务器的响应小于1024字节,以下代码也可以正常运行。 现在,我想将其转换为等效的lua代码。 这是我的尝试: 不幸的是,如果发送的字节数少于1024个字节,则接收调用块。
1回复

Lua:特定长度的字符串

将foo定义为特定长度的字符串 但是,有一种简单的方法可以获得 我知道,我可以用空格填充字符串data
1回复

我正在尝试将十进制格式的字符串转换为lua中的数字

我有2个整数变量,我想转换为十进制整数。 结果应该是这样的: a = 10 b = 12 c = 10.12 我可以将它们连接起来转换为字符串十进制,但是我不能在结果上使用数学函数。 我试图在字符串上使用tonumber() ,但得到一个nil值。
1回复

将字符串(例如“ a”)转换为lua中的数字

无论如何,我可以在Lua中获得诸如“ a”这样的字符的ASCII码吗? tonumber似乎不起作用。