gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:10:51 25 4
gpt4 key购买 nike

问题是:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com