问题描述
|
我的问题很容易用flex描述:
0.8 - 0.2 = 0.6000000000000001
以前有人知道过这个吗,我敢肯定前两个成员分别是0.8和0.2,并且是Number类,为什么会这样?
另外,我从cast1ѭ类型转换值,如下所示:
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在将Number转换为String(用于可视显示)时会为您舍入这些数字,从而消除了用户看不到的大多数错误。
, 本质上,有些数字不能完全用二进制表示。
尽管此页面有关浮点数是关于Java而不是Actionscript的,但许多语言仍然存在困难。该文章中有一节(请参见“舍入错误”)提到了数字如.6的问题。
这是一本很长的书,但是我发现它很有帮助(并且不如关于浮点运算的本页面那么长或数学繁重)。