Lua获得号码类型

在Lua中,在任何数字上使用类型函数总是返回'数字'。 有没有一个函数可以告诉你Lua解释器是否使用32位浮点数,64位双精度数,整数或其他数字类型?

我试图写一个这样的函数:

function numbertype()
  local rational = 5 / 2

  if rational == 2 then
    -- equals 2
    return 'int'
  else
    -- about 2.5
    return 'double' -- but could it be a 32 bit float or something else?
  end
end

print(numbertype())

它还不能检测到浮动,双打和未知类型之间的差异。 我如何查询Lua的数字类型是否等同于Lua解释器中的int,float或double? 我希望它能够在纯粹的Lua中工作。


纯Lua不能从口译员那里询问这些事情。 由于解释器使用不同类型的能力非常自由(可以选择任何浮点或整数类型),因此将此公开给Lua的唯一方法是将解释器编码为预期每种可能类型的数字它可以与编译。

一般来说,你不应该打扰关怀。 最好使用除双打以外的应用程序。 即使是需要处理ARM及其可怕的浮点数学的LuaJIT,仍然隐藏了将整数数学有效用作优化的能力; Lua代码无法区分差异。

这是应该的。


根据Lua 5.1参考手册,数字只是双精度浮点数。 要使用另一种类型,必须使用修改后的luaconf.h重新编译Lua。


也许你可以使用下面的workarround。 计算数字%1。 如果余数为0,那么它最有可能就像一个整数。

链接地址: http://www.djcxy.com/p/85583.html

上一篇: Lua get number type

下一篇: Convert float to bigint (aka portable way to get binary exponent & mantissa)