闪烁as3自动舍入数字

时间:2011-09-25 22:28:27

标签: actionscript-3 numbers rounding

我写了一篇很长的帖子试图解释我遇到的问题的确切细节,但我认为生病保持简单,并在这里问一个例子问题:

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。我不需要这个数字的精度,但我也不想微观管理数字的舍入每次我做一个操作(似乎它可以添加很多代码混合)。如果这是唯一的解决方案,那么我觉得不得不在整个代码中进行大量的舍入,哈哈。

2 个答案:

答案 0 :(得分:1)

flash中的Number是双精度浮点数。阅读更多关于他们的here。这些“问题”并不是闪存所独有的,而只是与这些数字的存储方式有关。

有几种选择。这是一个quick little library用于模糊比较数字,在一定的误差范围内。另一种选择是实施fixed point math library

答案 1 :(得分:0)

如果你想要比较,只是在int()中换行是一个问题吗?

trace(int(n1) == int(n3));