Flex / AS3非常奇怪简单的数字操作问题

时间:2011-05-27 15:46:12

标签: flash flex actionscript-3

我的问题很简单,在flex中描述:

0.8 - 0.2 = 0.6000000000000001

之前任何人都有这个,我确定前两个成员是0.8和0.2并且是Number类,为什么会发生这种情况?

另外,我从*类型转换了这样的值:

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

但仅此而已,如果我追踪value我得到的是0.8而不是0.800000000000001。

2 个答案:

答案 0 :(得分:4)

由于Floating Point Number Precision,这是所有语言中相当常见的问题。你无能为力,因为它是一个可以在所有机器上运行的错误值。

您可以从数字设置所需的精度:

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

在将Number转换为字符串(用于可视化显示)时,Flash通常会为您舍入这些数字,从而消除大部分错误,使其无法被用户查看。

答案 1 :(得分:1)

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

虽然this page about floating point numbers是关于Java而不是Actionscript,但很多语言存在困难。该文章中有一节(参见“舍入错误”),提到了像.6这样的数字的问题

这是一个很长的阅读,但我发现它非常有用(并且不像this page about Floating-Point Arithmetic那么长或数学繁重。)