【问题标题】:Strip trailing zeroes and decimal point去除尾随零和小数点
【发布时间】:2014-09-02 02:03:53
【问题描述】:

使用 Lua,我将数字格式化为可变位数并去除尾随零/小数点,例如

string.format(" %."..precision.."f", value):
  gsub("(%..-)0*$", "%1"):
  gsub("%.$", "")

值是数字类型(正数、负数、整数、小数)。

所以任务解决了,但出于审美、教育和性能方面的原因,我有兴趣了解是否有更优雅的方法 - 可能只使用一个 gsub()

string.format() 中的%g 是不可选择的,因为要避免使用科学记数法。

【问题讨论】:

  • value 是否有一些限制?
  • 嗯,它是某种数字,正数或负数,整数或小数。
  • 我会将第 2 行更改为 :gsub("(%.%d-)0+$", "%1")。如果没有零,它会跳过替换,并将点后的字符限制为数字(允许输入字符串更灵活)。此外,以冒号开头是链接命令的传统方式(一方面,它可以让您注释掉链末尾的一行而不会出现语法错误)。
  • @StuartP.Bentley 我认为它不适用于下一行的冒号,但你是对的,它确实如此!我在交互式 Lua 中尝试过,但没有。
  • 请记住,Lua REPL 会尽快执行语句,而您不能继续执行已经解释过的语句。

标签: lua string-formatting


【解决方案1】:

如果您的精度始终 > 0,则保证尾随字符是0 的浮点数序列或. 后跟0 的整数序列。因此,您可以识别并剥离此“预告片”,将字符串的其余部分保留为:

string.format(" %."..precision.."f", value)
   :gsub("%.?0+$", "")

它不会破坏以 0 结尾的整数,因为这些整数在重要的零之后会有浮点数,因此它们不会在字符串结尾之前被捕获为“0 的序列。

如果精度为 0,那么您根本不应该执行 gsub

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多