【问题标题】:Find the string length of a Lua number?查找 Lua 数的字符串长度?
【发布时间】:2011-09-12 20:49:26
【问题描述】:

这里可能是简单的问题,但搜索没有找到类似的问题。

# 运算符发现字符串的长度,除其他外,非常棒。但是由于 Lua 是动态类型的,因此没有转换运算符,如何将数字作为字符串类型来确定其长度?

例如,假设我想在格式化表格中打印从 1 到 9 的阶乘。

i,F = 1,1
while i<10 do
    print(i.."! == "..string.rep("0",10-#F)..F)
    i=i+1
    F=F*i
end

错误:尝试获取全局“F”的长度(数值)

【问题讨论】:

    标签: lua


    【解决方案1】:

    为什么不使用tostring(F)F 转换为字符串?

    【讨论】:

    • 虽然这确实有效,但 HennyH 有正确的答案。当有一个快速公式时,没有理由进行大量的字符串操作
    【解决方案2】:

    或者,

    length = math.floor(math.log10(number)+1)
    

    但请注意,这仅适用于 n > 0 的情况!

    【讨论】:

    • log10 自 LUA 5.2 起已弃用,log 应该可以正常工作
    【解决方案3】:

    可能有十几种方法可以做到这一点。正如 Dan 所说,最简单的方法是使用 tostring。您还可以连接一个空字符串,例如F_str=""..F 获取 F_str 作为字符串表示。但是由于您尝试输出格式化的字符串,请使用string.format 方法为您完成所有艰苦的工作:

    i,F = 1,1
    while i<10 do
        print(string.format("%01d! == %010d", i, F))
        i=i+1
        F=F*i
    end
    

    【讨论】:

    • 问题的重要部分是确定数字的字符串长度,Dan 回答了这个问题,但无论如何感谢您以另一种方式解决示例。
    【解决方案4】:

    while tostring(F).len &lt; 10 do 不是有用吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-13
      • 2013-05-03
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多