我有这个功能。
Calculations.add(this, //CONTEXT
function () { //CALUCATE
this.position.x += (this.movementSpeed.x / 10);
},
function () { //HAVE CALCULATED
return (this.position.x === (tempX + this.movementSpeed.x));
}
);
我已经运行了结果,但有时结果是错误的。因为我知道如果计算10次,那么HAVE CALCULATED
就是真的。
但有时它永远不会......而且会杀死我的应用程序。
让我们说结果应该给出138,然后计算后它给我138.000000000006,这不是138而HAVE CALCULATED
是假的。
我如何管理这个=我不能使用round,因为它应该能够返回138.5,如果最终结果是。
希望你理解我的问题。
答案 0 :(得分:1)
始终浮点=比较应该像这样:
Math.abs( a - b ) < 1e-6
其中1e-6
是您事先确定的任意错误阈值
答案 1 :(得分:0)
您绝不应该以这种方式比较浮点值。 (Waleed Khan在评论中的链接很好地解释了为什么会发生这种情况)
相反,您可以执行以下操作来检查a
和b
的相等性:
if (a < b + 0.0001 && a > b - 0.0001) {
// values are "equal"
}
答案 2 :(得分:0)
您可以从SO上的另一个answer舍入到一定数量的数字,使用以下内容:
function roundNumber(n, digits) {
var multiple = Math.pow(10, digits);
return Math.round(n * multiple) / multiple;;
}
这样您就不需要进行花哨的比较。