在我的引擎中,我有一个用于脚本编写的 Lua VM。在脚本中,我写了这样的内容:
stage = stage + 1
if (stage == 5) then ... end
and
objnum = tonumber("5")
if (stage == objnum)
根据 Lua 来源,Lua 在比较双精度数(它使用的内部数字类型)时使用简单的相等运算符。
我知道处理浮点值时存在精度问题,所以我想知道比较是否安全,即使用Lua默认的“==”操作简单地比较这些数字是否会出现问题?如果是这样,我可以采取任何对策来确保 1+2 始终等于 3 吗?将值转换为字符串可以吗?
You may如果您只关心某些情况下的相等性,最好先转换为字符串,然后比较结果。例如:
> print(21, 0.07*300, 21 == 0.07*300, tostring(21) == tostring(0.07*300))
21 21 false true
当我给我的学生分配这些数字(0.07 和 300)的作业并要求他们实施单元测试时,我学到了这一点,但结果却惨遭失败,抱怨 21 不等于 21(它是比较实际数字,但显示字符串化值) )。这是我们讨论比较浮点值的一个很好的理由。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)