首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我减去/大约0.05时,有一些/减去0.05000001 (变量被声明为数字)

当我减去/大约0.05时,有一些/减去0.05000001 (变量被声明为数字)
EN

Stack Overflow用户
提问于 2014-12-23 17:27:55
回答 1查看 54关注 0票数 1

以下是问题所在:

当VX为0.0 5或扣除0.0 5时,它将扣除/约0.05000001 (这将参与进入帧,FPS)

代码语言:javascript
复制
        **if(vx < 5 && KR){
            vx += 0.05;
        }else if(vx > 0 && !KR){
            vx -= 0.05;
        }else if(vx < 0 && !KL){
            vx += 0.05;
        }else if(vx < -5 && KL){
            vx -= 0.05;
        }
        if(vy < 5 && KD){
            vy += 0.05;
        }else if(vy > 0 && !KD){
            vy -= 0.05;
        }else if(vx < -5 && KU){
            vy -= 0.05;
        }else if(vx < 0 && !KU){
            vy += 0.05;
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-23 17:41:50

浮点数本质上是不精确的--有理数集是无限的,但根据IEEE-754标准,浮点Number-s存储在64位上。显然,64位不是无限位数,所以某些浮点值可以精确表示,而其他浮点值则不能表示。

通常,不能依靠浮点数来获得与试图分配的值相同的值。

代码语言:javascript
复制
var n:Number = 0.05;

编译器将将其转换为0.05的浮点表示形式,这可能会导致舍入错误。

在使用浮点数时,通常必须在所需的数字周围使用范围,而不是检查是否完全相等。所以不要做

代码语言:javascript
复制
if ( n == 0.05 ) // this may or may not fail, based on rounding

你应该做这样的事

代码语言:javascript
复制
if ( ( n > 0.04 ) && ( n < 0.06 ) ) // this will more likely work

范围取决于您-您必须决定有多少差异是可以接受的,当您做检查(在这里,我使用0.01)。但是,范围越小,就越有可能遇到舍入错误。越大的范围,你会得到越来越多的不精确的数字,通过检查。

这里有一个相当不错的文章,详细介绍一下。互联网上也有很多关于如何正确处理浮点数的资源。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27625197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档