Lua - 字符串行为的数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua - 字符串行为的数字相关的知识,希望对你有一定的参考价值。

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

它将转换为int(作为字符串),如果数字是圆的(如果number == (int) number)或它总是输出一个真实的(如字符串)像10.0

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

答案

在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

将float转换为字符串现在会在结果中添加.0后缀,如果它看起来像一个整数。 (例如,浮动2.0将打印为2.0,而不是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
另一答案

如果您使用5.3.4并且需要快速修补程序,请使用math.floor - 它将其强制转换为int-number。这打败了@warspyking的效率,但缺乏代码串联的酷感。

>tostring(math.floor(54.0))
54
>tostring(54.0)
54.0
另一答案

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

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

以上是关于Lua - 字符串行为的数字的主要内容,如果未能解决你的问题,请参考以下文章

一文读懂Lua元表

Lua - gmatch科学记数法字符串到数字

lua可以对单个字符和数字之间进行转换吗

扩展 lua require 的行为

lua中判断首字符为空

10个JavaScript代码片段,使你更加容易前端开发。