flash - Math.floor 是否像 ActionScript 3 中的 Math.round 一样?

标签 flash actionscript-3 math actionscript

问题是:

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 中一个未报告的错误。或者……我做错了什么?

最佳答案

首先,这不是bug!!!

您正在使用数字类型 double - [IEEE 浮点运算标准 (IEEE 754)][1]。这意味着您没有确切的数字,而是接近确切值的近似数字。

例如,如果你想在数字 33 附近的 double 值尾数上加上或减去可能的最小值,那么你会得到值:

32.999999999999986
32.99999999999999
33.0
33.00000000000001
33.000000000000014

你基本上是 double 值可以拥有的最接近 33 的值。如果你没有发现差异,那么

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

现在 32.999999999999999 在 code 被解释或解析为数字时变为 33.0。同样,如果您打印出 32.9999999999999879,您将得到 32.999999999999986 - double 只是没有位来存储额外的精度,它将被替换为最接近的值。再次注意,这不是算术上最接近的,而是标准中定义的。

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

关于flash - Math.floor 是否像 ActionScript 3 中的 Math.round 一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221332/

相关文章:

java - Android 动画 flash vs. HTML5 vs. Android 的原生动画库?

apache-flex - ActionScript 3.0 上的 MouseEvent.CLICK 和 Mouse Event.MOUSEDOWN 有什么区别

c++ - 不需要的舍入 C++

sql - 如何将 UPDATE + 数学函数执行到空列中?

c# - 将 3D 网格分割为任意大小的 block

javascript - 在 Web UI 中可视化有向图的建议

flash - 有没有类似于 FlashDevelop for Ubuntu 的工具?

flash - flash.media.Sound.play需要很长时间才能返回

actionscript-3 - AS3-为什么我收到此错误 “Access of undefined property minge”?

actionscript-3 - 在 as3 中实现源时获取类型未找到错误