C Lua-数字到字符串的行为
我想知道Lua如何使用C Lua-数字到字符串的行为,c,lua,tostring,C,Lua,Tostring,我想知道Lua如何使用tostring()函数处理从数字到字符串的转换 如果数字是圆形的(即number==(int)number),它将转换为int(作为字符串),或者它总是输出一个实数(作为字符串),如10.0 我需要在C中模拟Lua的tostring的确切行为,而不使用Lua C API,因为在这种情况下,我没有使用Lua_状态Lua按原样转换数字: print(tostring(10)) => "10" print(tostring(10.0)) => "10.0" prin
tostring()
函数处理从数字到字符串的转换
如果数字是圆形的(即number==(int)number
),它将转换为int(作为字符串),或者它总是输出一个实数(作为字符串),如10.0
我需要在C中模拟Lua的
tostring
的确切行为,而不使用Lua C API,因为在这种情况下,我没有使用Lua_状态
Lua按原样转换数字:
print(tostring(10)) => "10"
print(tostring(10.0)) => "10.0"
print(tostring(10.1)) => "10.1"
如果您想使用它们,有一个小型的在线解析器,用于执行以下简单命令:
这使用Lua5.3.1
编辑
我必须支持伊戈尔的评论,它取决于版本。
我在我的系统上本地运行了此操作:
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(tostring(10))
10
> print(tostring(10.0))
10
在Lua5.2或更早版本中,
tostring(10)
和tostring(10.0)
都会生成字符串“10”
在Lua 5.3中,这一点发生了变化:
print(tostring(10)) -- "10"
print(tostring(10.0)) -- "10.0"
这是因为Lua5.3引入了整数子类型。发件人:
现在,将浮点转换为字符串会在结果中添加一个.0
后缀(如果它看起来像整数)。(例如,浮点2.0
将打印为2.0
,而不是2
)当您需要数字的特定格式时,应始终使用显式格式
在Lua5.3中,由于整数类型,浮点上的
tostring
(虽然它的数值可能等于整数)将添加“.0”
后缀,但这并不意味着不能缩短它
local str = tostring(n)
if str:sub(-2) == ".0" then
str = str:sub(1,-3)
end
如果您使用的是5.3.4,并且需要快速修补程序,请使用math.floor-它会将其转换为整数。这在效率上优于@warspyking answer,但缺少一堆代码的酷性
>tostring(math.floor(54.0))
54
>tostring(54.0)
54.0
>type(math.floor(54.0))
integer
>type(54.0)
number
这取决于Lua的版本。谢谢,我会试试这个。有没有关于Lua的tostring函数的官方文档?我一直在搜索,但信息非常稀少,每次你需要一条信息时,你都必须阅读整本书……我能找到的只是,以及我所怀疑的,如果number==(int)数字,它打印了一个int。我不敢相信这些基本功能没有官方文档。无论如何,谢谢你的帮助。谢谢你的帮助。所以这不像我预期的那么简单。我正在使用5.3.2,不打算使用其他版本。