FLASH笔记:AS在计算方面的8个常见问题

笔记|问题

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
大数目与小数点相加的错误

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

小编物语:象这样的小问题,也许许多朋友也曾经遇到过吧……明明一切都是正确的,可结果却又是错误的……恩,非常感谢细心的luke呢,国际惯例大家以前去luke的blog灌水吧~

时间: 2024-12-01 14:45:29

FLASH笔记:AS在计算方面的8个常见问题的相关文章

这回EMC在闪存方面的“野心”全都暴露了

这回EMC在闪存方面的"野心"全都暴露出来了(可不是贬义哟).在3月9日的新产品发布上,最重头的发布就是EMC全新的闪存产品. 2008年,当闪存刚刚开始在企业级存储市场上露头时,EMC已经把SSD用于其高端存储阵列,作为"大缓存"使用,而且在一些省级的电信运营商那里率先得到了应用. 2012年5月,EMC收购了闪存厂商XtremIO,当时XtremIO还没有销售过任何产品,其第一款产品是一年之后才问世的.就是这样一家技术型公司现在让EMC体会到了收获的甜蜜.Xtr

程序-关于VS水晶报表方面的

问题描述 关于VS水晶报表方面的 1>e:vscrreportdemocrreportdemodialogreport.cpp(11): error C2084: 函数"CRuntimeClass *CDialogReport::GetRuntimeClass(void) const"已有主体程序太多,请加下我的扣扣:谢谢QQ:1279738443 解决方案 同样的函数原型多次定义Error C2084

推荐几本搜索引擎方面的书

问题描述 最近转到搜索方向,很迷茫,麻烦大家推荐几本搜索方面的书,并介绍各书的侧重点,谢谢! 解决方案 看Action in Lucene 看完你就转了, 这个比较适合当跳板.解决方案二:<搜索引擎优化><搜索引擎营销-网站流量大提速>搜索引擎原理,实践和应用SEO教程:搜索引擎优化入门与进阶 -- 人民邮电出版社 吴泽欣 编著 入门级别的优化教程.搜索引擎优化 -- 清华大学出版社 (美)格拉夫 库辛 著,杨明军 译 从项目的角度来优化.走进搜索引擎 -- 电子工业出版社 梁斌

亚马逊 网盘-如何调用亚马逊网盘方面的API?

问题描述 如何调用亚马逊网盘方面的API? 我想实现亚马逊的网盘客户端,不知道如何整,哪位大神,各点意见. 解决方案 首先,亚马逊提供网盘接口么?若提供,去看下是否有权限申请,若能申请成功做起来就很简单.

qgis 刚接触这方面,还不是很懂。做热力图方面的,求大神解答

问题描述 qgis 刚接触这方面,还不是很懂.做热力图方面的,求大神解答 错误提示是Traceback (most recent call last): File ""C:/PROGRA~2/QGISES~1/apps/qgis/./python/pluginsGdalToolstoolswidgetPluginBase.py"" line 88 in onFinished self.base.onFinished(exitCode status) File &qu

要自动识别验证玛图片,应该看哪方面的书?图形图象?哪本书有讲?麻烦搞过这个的讲一下``该怎么样学习``?

问题描述 要自动识别验证玛图片,应该看哪方面的书?图形图象?哪本书有讲?麻烦搞过这个的讲一下``该怎么样学习``?谢谢 解决方案 解决方案二:这个图片上的验证码是先产生字符串,然后画在图片上的```实际验证的还是那个字符串``解决方案三:sf没了,就这么简单的问题,楼上说的很名白了,去看gdi+怎么把字画在图上解决方案四:如何生成就如何识别了!!你既然知道了在生成!!那识别一样的原理!

功率谱估计-谁会这俩道自适应滤波的题啊,时域离散随机信号处理方面的,急急急,求大神

问题描述 谁会这俩道自适应滤波的题啊,时域离散随机信号处理方面的,急急急,求大神 跪求大神啊!有关于数字信号处理中的时域离散随机信号处理的内容,真的很急!大神!大神! 解决方案 题就是这两张图上的,求大神给出上帝之手!

ncc-请问哪位大牛有立体匹配方面的,关于NCC算法求深度图的C或C++源码。。。

问题描述 请问哪位大牛有立体匹配方面的,关于NCC算法求深度图的C或C++源码... 在论坛的资源里找了好久也没找到满意的,求大牛啊,最好匹配结果好一点的 解决方案 http://blog.csdn.net/tulun/article/details/6388759

opengl-linux api为什么只有内存 线程 进程 文件方面的?

问题描述 linux api为什么只有内存 线程 进程 文件方面的? 1.那么界面是不是要靠OpenGL? QT底层是OpenGL实现的吗?2.我如果不需要好的界面,只有API能实现任何功能吗?还是得学些别的? 解决方案 终极解答:1. 图形界面GUI,有很多不同的实现库,而且分很多层逐级实现,例如你说的QT界面库,它在不同的操作系统平台上底层依赖的更基础的图形库也不同,在Windows平台依赖GDI32.dll,在嵌入式平台可能依赖于fb,也可能依赖于XWindow.至于OpenGL是一个相当