Flex/AS3非常奇怪的简单编号操作问题



我的问题很容易描述,在flex中:

0.8 - 0.2 = 0.6000000000000001

任何人以前都有过这样的经历,我相信前两个成员分别是0.8和0.2,都是数字级的,为什么会发生这种情况??

还有一件事,我把*类型的值如下所示:

var value:*=0.8;
var castValue:Number = Number(value);

但更重要的是,如果我追踪value,我得到0.8,而不是0.800000000000001或其他什么。

这是所有语言中相当常见的问题,因为浮点数字精度。您对此无能为力,因为这是一个在所有机器上都可能出现的错误值。

你可以做的是从数字中设置一个你想要的精度:

trace(castValue.toFixed(5)); // Gives five decimals after the point

通常情况下,Flash会在将数字转换为字符串(用于可视化显示)的过程中为您四舍五入这些数字,从而消除用户无法查看的大多数错误。

本质上,有些数字无法用二进制精确表示。

尽管这个关于浮点数的页面是关于Java而不是Actionscript的,但在很多语言中都存在这种困难。这篇文章中有一节(见"舍入错误")提到了数字的问题,比如.6

这是一本很长的书,但我发现它很有帮助(不像这一页关于浮点运算的书那么长或数学量大)。

最新更新