【问题标题】:Lua - Number to string behaviourLua - 数字到字符串的行为
【发布时间】:2016-07-02 01:28:26
【问题描述】:

我想知道 Lua 如何使用tostring() 函数处理数字到字符串的转换。

如果数字是整数(即number == (int) number),它将转换为整数(作为字符串),还是总是会输出像10.0这样的实数(作为字符串)?

我需要在 C 中模仿 Lua 的 tostring 的确切行为,而不使用 Lua C API,因为在这种情况下,我没有使用 lua_State

【问题讨论】:

  • 取决于 Lua 版本。

标签: c lua tostring


【解决方案1】:

在 Lua 5.2 或更早的版本中,tostring(10)tostring(10.0) 的结果都是字符串 "10"

在 Lua 5.3 中,这发生了变化:

print(tostring(10)) -- "10"
print(tostring(10.0)) -- "10.0"

那是因为 Lua 5.3 引入了整数子类型。来自Changes in the Language

如果结果看起来像整数,现在将浮点数转换为字符串会在结果中添加.0 后缀。 (例如,浮点数 2.0 将打印为 2.0,而不是 2。)当您需要特定格式的数字时,您应该始终使用明确的格式。

【讨论】:

  • 感谢您的帮助。所以这并不像我想象的那么容易。我正在使用 5.3.2,不打算使用其他版本。
【解决方案2】:

Lua 按原样转换数字:

print(tostring(10)) => "10"
print(tostring(10.0)) => "10.0"
print(tostring(10.1)) => "10.1"

如果你想玩弄它们,这里有一个小型在线解析器,可以处理像这样的简单命令:http://www.lua.org/cgi-bin/demo 这使用 Lua 5.3.1

编辑 我必须支持 Egor 的评论,它取决于版本。 我在我的系统上本地运行它:

Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(tostring(10))
10
> print(tostring(10.0)) 
10

【讨论】:

  • 谢谢,我会试试这个。没有关于 lua 的 tostring 函数的官方文档吗?我一直在搜索,但信息真的很稀少,每次你想要一条信息时都必须阅读整本书......
  • 正如我所怀疑的,如果 number == (int) number,它会打印一个 int。我不敢相信没有这些基本功能的官方文档。无论如何感谢您的帮助。
【解决方案3】:

如果您使用的是 5.3.4 并且需要快速修复,请使用 math.floor - 它会将其转换为整数。这在效率上超过了@warspyking 的答案,但缺乏一堆代码的酷炫。

>tostring(math.floor(54.0))
54
>tostring(54.0)
54.0
>type(math.floor(54.0))
integer
>type(54.0)
number

【讨论】:

    【解决方案4】:

    在 Lua 5.3 中,由于整数类型,浮点数上的tostring(虽然它的数值可能等同于整数)会添加一个"'.0' 后缀,但这并不意味着你不能缩短它!

    local str = tostring(n)
    if str:sub(-2) == ".0" then
        str = str:sub(1,-3)
    end
    

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 2020-02-20
      • 2017-11-07
      • 2016-09-07
      • 2022-01-09
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多