如您所知,浮点数存在精度问题,即值1将为0.9999999。并且lua在C中使用==来检查两个双数是否相等。所以问题是:
a = 5.6
b = 14 * 0.4
print(a==b) ; => false
但最糟糕的是:
a = 1
...
if a < 1 then print("<1") end ; => sometimes a < 1
那我怎么能避免这个呢?我查看lua源代码,似乎我可以在luaconf.h中修改luai_numeq / luai_numle)宏,但这是必要的吗?
更新
第二个例子并不正确。实际上我的问题是,我将值1传递给使用lua_tonumber获取值的c / c ++,并且我将此值存储在double变量中,并且在一段时间之后,我将值(lua_pushnumber)推送到lua,并且&lt; 1发生了:
in lua:
my_cfunction(1)
...
in c:
int my_cfunction(lua_State *L) {
double val = lua_tonumber(L, 1);
...
...
lua_pushnumber(L, val);
in lua:
local a = my_cfunction2()
if a < 1 then ... end
答案 0 :(得分:5)
如您所知,浮点数存在精度问题,即值1将为0.9999999
我根本不知道。因为事实并非如此。 1.0是1.0。这样:
a = 1
if a < 1 then print("<1") end
永远不会打印&#34;&lt; 1&#34;。除非您实际更改a
,否则不会。即便如此:
a = 2
a = a - 1
if a < 1 then print("<1") end
同样也不会发表print
声明。
只要你对Lua的数字执行整数运算,你就会得到整数。没有整数值的加法,减法或乘法将为您留下非整数数值。
答案 1 :(得分:4)