• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Math.floor在ActionScript 3中的行为如同Math.round一样吗?

flash 来源:macloo 7次浏览

这里的问题是:Math.floor在ActionScript 3中的行为如同Math.round一样吗?

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

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


===========解决方案如下:

首先,这是不是一个错误!

您正在使用编号类型double – [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


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)