在LUA中(在introduction of integers in 5.3之前),用于处理for循环中计算出的范围值的典型方法是什么?在 numerical for 循环中对开始和结束值进行数学计算会使代码面临错误的风险,可能是令人讨厌的潜在错误,因为这只会在某些值和/或更改计算顺序时发生。这是一个不产生期望输出的循环的精巧示例:
a={"a","b","c","d","e"}
maybethree = 3
maybethree = maybethree / 94
maybethree = maybethree * 94
for i = 1,maybethree do print(a[i]) end
这将产生两个项目的非强制输出,而不是所需的三个项目(在64位x86上的5.1.4上测试):
a
b
不熟悉此领域的程序员可能会因输出 print()而感到困惑,因为它会输出3!
将舍入函数应用于最接近的整数可以在这里工作。我了解approximatation with FP以及失败的原因,我对LUA中典型的样式/解决方案感兴趣。
相关问题:
答案 0 :(得分:2)
解决方案是避免对浮点数学的依赖,因为浮点数学可能会成为问题。或者,更现实的是,仅需注意何时使用FP并注意精度问题。这不是Lua问题,需要Lua特定的解决方案。
maybethree
是一个错误的名词:从不是三个。您上面的代码是确定性的。它将始终仅打印a
和b
。由于maybethree
变量小于3,因此for
循环当然不会执行3次。
print
函数的行为也与定义/预期的一样。使用string.format
可以显示其所有FP编号:
print(string.format("%1.16f", maybethree)) -- 2.9999999999999996
仍然需要使用计算所得的值来控制您的for
循环吗?然后,您已经提到了答案:实现舍入功能。