【问题标题】:Lua convert string to number - locale dependentLua 将字符串转换为数字 - 取决于语言环境
【发布时间】:2016-05-02 10:19:29
【问题描述】:

刚刚注意到 Lua 中的 tostring()tonumber() 依赖于语言环境。知道如何在不使用 tonumber() 的情况下将字符串转换为数字吗?谢谢。

例如将字符串“-58.5”转换为-58.5

此外,当我尝试将带点的数字传递给函数时,函数会转换“。”到“,”自动。你一般是怎么解决这类问题的?

功能测试(数量) 打印(数量) 结束

test(-58.5) -- 它打印 -58,5

【问题讨论】:

  • 没有编号?您可以尝试将 0 添加到字符串中。它应该为您进行自动转换。可能仍然依赖于语言环境。

标签: lua locale


【解决方案1】:

test 函数的结果本身取决于语言环境。 (在我的机器上使用默认设置,我得到-58.5 的结果,因为我的语言环境是en_US.UTF-8。)

您应该可以通过os.setlocale 设置您喜欢的语言环境。这可能比编写自己的 tonumber 函数更简单。

例如:

local function nshow(n) print(n) end
local n = -58.5

print(os.setlocale("de_DE.UTF-8"))
nshow(n)
print(os.setlocale("C"))
nshow(n)

输出:

de_DE.UTF-8
-58,5
C
-58.5

【讨论】:

  • 谢谢。运行代码的控制系统不允许 os.setlocale()。无论如何,我使用了一种解决方法来获取小数点分隔符,然后替换“。”带有小数点分隔符的 tonumber() 输入。
  • 显然 Lua 在tonumber 中也不能正确处理千位分隔符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 2022-01-28
相关资源
最近更新 更多