Lua - 数字是浮点型还是双精度型?

Lua 文档说 Lua 用双精度型来表示数字类型的值,它可以使用浮点数正确地表示所有长整型值。

然而,我在代码中看到,lua_Number 实际上是一个浮点数。这给了我以下警告:

warning C4244: 'argument' : conversion from 'double' to 'lua_Number', possible loss of data

对于:

double fVarVal = 0.0;
lua_pushnumber( L, fVarVal );

那么 Lua 中的数字类型的值是如何表示的呢?是浮点数还是双精度数?如果它们使用浮点数,那么当使用整数值(例如数组索引)时,是否会出现问题?

我正在使用 Windows CE 上的 Lua 5.3.2。

点赞
用户734069
用户734069

我正在使用适用于 Windows 的 Lua 5.3.2。

这很重要。在 Lua 5.3 中,可以直接使用实际整数。尽管在 Lua 中一直有 lua_pushinteger 函数,但在 5.3 中,该函数不会将其转换为 double,而是一个 64 位整数。

当然,在 Lua 中,整数和浮点数看起来一样。Lua C API 的大多数不会区分它们。但如果您希望的话,它也可以分开。

无论如何,lua_Number 默认为 double,因此即使在 Lua 5.1/2 中,整数作为浮点数也不是什么大问题。当然,lua_Integerlua_Number 可以根据您的需求进行调整。只需注意,您使用的外部 DLL 也必须使用这些设置重新编译。

2016-03-09 15:04:23