AS计算方面的错误

hegjkhgufio

hegjkhgufio

2016-01-29 13:25

AS计算方面的错误,AS计算方面的错误
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)时会出现

第二种

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fjc/)(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fjc/)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第三种

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fjc/)(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fjc/)var a=10;
var b=Math.sqrt(a)*Math.sqrt(a);
trace(b);// 输出变量b为 10
trace(b==10); // 比较的时候却是 false;

这类复杂的计算容易出错

第四种

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fjc/)(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fjc/)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第七种

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fjc/)(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fjc/)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第八种

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fjc/)(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/fjc/)var a = 9999999999;
a += 0.000005;
trace(a);//9999999999.00001

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

以上都是大家常会犯上的错误,逻辑上是没错但却又找不到问题所在。所以要以Flash做大量的计算的话还是需要考虑清楚
展开更多 50%)
分享

猜你喜欢

AS计算方面的错误

flash教程
AS计算方面的错误

关于验孕方面的错误观点

电脑网络
关于验孕方面的错误观点

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

身份证方面的函数

Web开发
身份证方面的函数

汤圆有哪些方面的作用

电脑网络
汤圆有哪些方面的作用

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

《国土防线》各方面的评价

电脑网络
《国土防线》各方面的评价

新生儿穿方面的清单

电脑网络
新生儿穿方面的清单

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

利用PHP和AJAX创建RSS聚合器

利用PHP和AJAX创建RSS聚合器

如何用PHP程序控制浏览器cache

如何用PHP程序控制浏览器cache
下拉加载更多内容 ↓