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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |