当前位置: 首页 > 图文教程 > Flash动画 > Flash动画制作 > AS计算方面的错误

Flash动画制作
FLASH MX 2004右键菜单秀
轻松打造Flash帧速率测试器
Flash制作马赛克效果
一些Flash经验法则
Flash MX 2004 UI组件系列教程(2)
Flash加载外部文件(1)
Flash加载外部文件(4)
Flash MX 2004 UI组件系列教程(6)
Flash MX 2004 UI组件系列教程(5)
Flash MX 2004 UI组件系列教程(7)
Flash MX 2004滚动文本框的两种做法
Flash MX 2004 UI组件系列教程(1)
Flash 8中文版视频教程 滤镜-渐变发光
Flash 8中文版视频教程 滤镜-斜角
Flash 8中文版视频教程 滤镜-渐变斜角
PowerPoint中使用Flash的两点技巧
Flash动画 让其巧妙的设置成桌面上的布景
Flash 8中文版视频教程 滤镜-调整颜色
Flash 8中文版视频教程 绘画-联合
Flash 8中文版视频教程 绘画-裁切

Flash动画制作 中的 AS计算方面的错误


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-22   浏览: 123 ::
收藏到网摘: n/a

AS在计算方面会有小小的偏差,而这份偏差可能会导致很多问题。那么通常出现的问题有哪几种呢?这里我把本身遇到和以前看过的凑起来

第一种

var a=(1/3);
trace(a); // 输出 0.333333333333333
trace(a*3); // 输出 1
到这里为止的计算没有问题,那么接下来看看所出现的问题
var b=a.toString(); //把a转换为文字
var c=Number(b); //再把文字转换为数字
trace(c); // 输出 0.333333333333333
trace(c*3); // 输出 0.999999999999999
看看问题是不是出现了呢?0.99999999999999
并不是我们的准确答案,这通常会发生在制作计算器(calculator)时会出现

第二种

var b = (4/3)-0.333333333333333;
var e = Number(String(b));
trace(b); //输出 1
trace(e); //输出文字转换数字 1
trace(String(b) == String(e)); //文字比较为 true
trace(b == e); // 数字比较为 false;
trace(b-e); //输出 2.22044604925031e-16

同上都是数字转换文字后再转换为数字的问题,解决方法是不要自己定义小数

var a = 1/3; //改用变量
var b = (4/3)-a;
var e = Number(b.toString());
trace(b); //输出 1
trace(e); //输出文字转换数字 1
trace(b.toString() == e.toString()); //文字比较为 true
trace(b == e); // 数字比较为 true;
trace(b-e); //输出 0
第三种

var a=10;
var b=Math.sqrt(a)*Math.sqrt(a);
trace(b);// 输出变量b为 10
trace(b==10); // 比较的时候却是 false;

这类复杂的计算容易出错

第四种

var a=1000*Math.PI/180;
var b=(Math.PI/180)*1000;
trace(a);// 输出 17.4532925199433
trace(b);// 输出 17.4532925199433
trace(a==b); //比较为 false
trace(a-b); //输出 -3.5527136788005e-15

在角度和弧度转换时的错误,最好角度值不要太大。角度在360内是绝对没有问题的

第五种

var a=(99.9-0.1);
trace(a==99.8);// 输出 false
这类比较严重,所以尽量避免使用。如果是非要这样判断的话,就把a转换为文字后比较才可以解决
第六种

var a = 10;
for (var i = 0; i<20; i++) {
a -= 0.1;
trace(a);
}

输出为
9.9
9.8
9.7
9.6
9.5
9.4
9.3
9.2
9.1
9
8.9
8.8
8.7
8.6
8.50000000000001
8.40000000000001
8.30000000000001
8.20000000000001
8.10000000000001
8.00000000000001
第七种

    

for (var i =-1; i<1; i+=0.1) {
trace(i);
}

输出为

-1
-0.9
-0.8
-0.7
-0.6
-0.5
-0.4
-0.3
-0.2
-0.1
-1.38777878078145e-16
0.0999999999999999
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
第八种

var a = 9999999999;
a += 0.000005;
trace(a);//9999999999.00001

大数目与小数点相加的错误

以上都是大家常会犯上的错误,逻辑上是没错但却又找不到问题所在。所以要以做大量的计算的话还是需要考虑清楚