Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Lua-数字到字符串的行为_C_Lua_Tostring - Fatal编程技术网

C 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

我想知道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"
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,不打算使用其他版本。