我写了一篇很长的帖子试图解释我遇到的问题的确切细节,但我认为生病保持简单,并在这里问一个例子问题:
var n1:Number = 9.99999999999999;
n1 += 0.000000000000009;
var n2:Number = n1 + 10;
var n3:Number = n1 - 10;
长话短说,n1 = 9.99 .... 7,n2 = 20,n3 = 10.
如果我尝试在n1和n3之间进行比较,它们应该是相同的,但它们不是。我不在乎闪光是否圆滑,我只需要它们是相同的(它们不会,在一种情况下导致闪光轮,而不是另一种情况)。
这样的问题是否有一些标准解决方案?
P.S。我不需要这个数字的精度,但我也不想微观管理数字的舍入每次我做一个操作(似乎它可以添加很多代码混合)。如果这是唯一的解决方案,那么我觉得不得不在整个代码中进行大量的舍入,哈哈。
答案 0 :(得分:1)
flash中的Number
是双精度浮点数。阅读更多关于他们的here。这些“问题”并不是闪存所独有的,而只是与这些数字的存储方式有关。
有几种选择。这是一个quick little library用于模糊比较数字,在一定的误差范围内。另一种选择是实施fixed point math library。
答案 1 :(得分:0)
如果你想要比较,只是在int()中换行是一个问题吗?
trace(int(n1) == int(n3));