加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash – Math.floor在ActionScript 3中的行为类似于Math.round

发布时间:2020-12-15 07:21:52 所属栏目:百科 来源:网络整理
导读:这是问题所在: var p:int = 0;var n:Number = 0;n = 32.999999999999999;p = Math.floor(n);trace(p); // returns 33 n = 32.22222222221111;p = Math.floor(n);trace(p); // returns 32 我希望这两个都返回32.我已经搜索过了,这似乎是AS3中未报告的错误.或
这是问题所在:

var p:int = 0;
var n:Number = 0;
n = 32.999999999999999;
p = Math.floor(n);
trace(p); // returns 33 
n = 32.22222222221111;
p = Math.floor(n);
trace(p); // returns 32

我希望这两个都返回32.我已经搜索过了,这似乎是AS3中未报告的错误.或者……我做错了什么?

解决方法

首先,这不是一个错误!

您正在使用数字类型双 – [IEEE浮点运算标准(IEEE 754)] [1].这意味着您没有确切的数字,但接近精确值的近似数字.

例如,如果要将最小可能值添加或减去数字33左右的双值尾数,则得到值:

32.999999999999986
32.99999999999999
33.0
33.00000000000001
33.000000000000014

你的本质上是最接近33的双值可以得到的值.如果你没有发现差异,那么

32.99999999999999     // closest lower
32.999999999999999    // input value
33.0                  // closest higher

现在,当代码被解释或解析为数字时,32.999999999999999变为33.0.以同样的方式,如果您打印出32.9999999999999879,您将得到32.999999999999986 – double只是没有用于存储该额外精度的位,并且它将被替换为最接近的值.再次注意,这不是算术上最接近的,而是在标准中定义的.

推荐阅读:http://en.wikipedia.org/wiki/Machine_epsilon

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读