我的问题很简单,在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。
答案 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那么长或数学繁重。)