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 - 字符串行为的数字的主要内容,如果未能解决你的问题,请参考以下文章