首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浮点数,负零?

浮点数,负零?
EN

Stack Overflow用户
提问于 2012-06-13 22:36:33
回答 1查看 259关注 0票数 0

我正在为我的游戏设置音效音量。我希望卷从0.0增加到1.0,增量为0.1。

然而,当它达到零时,我的日志反而告诉我它是-0.00000,并继续向下计数。请告诉我是怎么回事。谢谢

代码语言:javascript
复制
-(void)sfxUp{
     NSLog(@"SFX UP %f",[[NSUserDefaults standardUserDefaults]floatForKey:@"sfx_volume"]);
    if ([[NSUserDefaults standardUserDefaults]floatForKey:@"sfx_volume"] == 1.0f)
        return;
    [[NSUserDefaults standardUserDefaults]setFloat:([[NSUserDefaults standardUserDefaults]floatForKey:@"sfx_volume"]+0.1f) forKey:@"sfx_volume"];
    [[NSUserDefaults standardUserDefaults]synchronize];
    [[SimpleAudioEngine sharedEngine] setEffectsVolume:[[NSUserDefaults standardUserDefaults]floatForKey:@"sfx_volume"]];
    NSLog(@"SFX UP %f",[[NSUserDefaults standardUserDefaults]floatForKey:@"sfx_volume"]);
}
-(void)sfxDown{
    NSLog(@"SFX DOWN %f",[[NSUserDefaults standardUserDefaults]floatForKey:@"sfx_volume"]);
    if ([[NSUserDefaults standardUserDefaults]floatForKey:@"sfx_volume"] == 0.0f)
        return;
    [[NSUserDefaults standardUserDefaults]setFloat:([[NSUserDefaults standardUserDefaults]floatForKey:@"sfx_volume"]-0.1f) forKey:@"sfx_volume"];
    [[NSUserDefaults standardUserDefaults]synchronize];
    [[SimpleAudioEngine sharedEngine] setEffectsVolume:[[NSUserDefaults standardUserDefaults]floatForKey:@"sfx_volume"]];
     NSLog(@"SFX DOWN %f",[[NSUserDefaults standardUserDefaults]floatForKey:@"sfx_volume"]);
}

单击“音量下降”按钮,这是我的日志输出:

代码语言:javascript
复制
2012-06-13 18:32:25.067 Bomb Defuse[80558:1c403] SFX DOWN 1.000000
2012-06-13 18:32:25.068 Bomb Defuse[80558:1c403] SFX DOWN 0.900000
2012-06-13 18:32:25.385 Bomb Defuse[80558:1c403] SFX DOWN 0.900000
2012-06-13 18:32:25.386 Bomb Defuse[80558:1c403] SFX DOWN 0.800000
2012-06-13 18:32:25.623 Bomb Defuse[80558:1c403] SFX DOWN 0.800000
2012-06-13 18:32:25.624 Bomb Defuse[80558:1c403] SFX DOWN 0.700000
2012-06-13 18:32:25.873 Bomb Defuse[80558:1c403] SFX DOWN 0.700000
2012-06-13 18:32:25.874 Bomb Defuse[80558:1c403] SFX DOWN 0.600000
2012-06-13 18:32:26.116 Bomb Defuse[80558:1c403] SFX DOWN 0.600000
2012-06-13 18:32:26.140 Bomb Defuse[80558:1c403] SFX DOWN 0.500000
2012-06-13 18:32:26.346 Bomb Defuse[80558:1c403] SFX DOWN 0.500000
2012-06-13 18:32:26.348 Bomb Defuse[80558:1c403] SFX DOWN 0.400000
2012-06-13 18:32:26.605 Bomb Defuse[80558:1c403] SFX DOWN 0.400000
2012-06-13 18:32:26.608 Bomb Defuse[80558:1c403] SFX DOWN 0.300000
2012-06-13 18:32:26.835 Bomb Defuse[80558:1c403] SFX DOWN 0.300000
2012-06-13 18:32:26.838 Bomb Defuse[80558:1c403] SFX DOWN 0.200000
2012-06-13 18:32:27.068 Bomb Defuse[80558:1c403] SFX DOWN 0.200000
2012-06-13 18:32:27.069 Bomb Defuse[80558:1c403] SFX DOWN 0.100000
2012-06-13 18:32:27.319 Bomb Defuse[80558:1c403] SFX DOWN 0.100000
2012-06-13 18:32:27.338 Bomb Defuse[80558:1c403] SFX DOWN -0.000000
2012-06-13 18:32:27.630 Bomb Defuse[80558:1c403] SFX DOWN -0.000000
2012-06-13 18:32:27.640 Bomb Defuse[80558:1c403] SFX DOWN -0.100000
2012-06-13 18:32:27.946 Bomb Defuse[80558:1c403] SFX DOWN -0.100000
2012-06-13 18:32:27.947 Bomb Defuse[80558:1c403] SFX DOWN -0.200000
2012-06-13 18:32:28.170 Bomb Defuse[80558:1c403] SFX DOWN -0.200000
2012-06-13 18:32:28.172 Bomb Defuse[80558:1c403] SFX DOWN -0.300000
2012-06-13 18:32:28.414 Bomb Defuse[80558:1c403] SFX DOWN -0.300000
2012-06-13 18:32:28.416 Bomb Defuse[80558:1c403] SFX DOWN -0.400000
2012-06-13 18:32:28.641 Bomb Defuse[80558:1c403] SFX DOWN -0.400000
2012-06-13 18:32:28.643 Bomb Defuse[80558:1c403] SFX DOWN -0.500000
2012-06-13 18:32:28.869 Bomb Defuse[80558:1c403] SFX DOWN -0.500000
2012-06-13 18:32:28.870 Bomb Defuse[80558:1c403] SFX DOWN -0.600000
2012-06-13 18:32:29.301 Bomb Defuse[80558:1c403] SFX DOWN -0.600000
2012-06-13 18:32:29.303 Bomb Defuse[80558:1c403] SFX DOWN -0.700000
2012-06-13 18:32:29.584 Bomb Defuse[80558:1c403] SFX DOWN -0.700000
2012-06-13 18:32:29.586 Bomb Defuse[80558:1c403] SFX DOWN -0.800000

编辑:

更改为>=和<= (分别)具有以下输出:

代码语言:javascript
复制
2012-06-13 18:45:34.574 Bomb Defuse[80607:1c403] BG UP 1.000000
2012-06-13 18:45:35.135 Bomb Defuse[80607:1c403] BG UP 1.000000
2012-06-13 18:45:35.529 Bomb Defuse[80607:1c403] BG UP 1.000000
2012-06-13 18:45:35.877 Bomb Defuse[80607:1c403] BG UP 1.000000
2012-06-13 18:45:36.057 Bomb Defuse[80607:1c403] BG UP 1.000000
2012-06-13 18:45:36.229 Bomb Defuse[80607:1c403] BG UP 1.000000
2012-06-13 18:45:36.391 Bomb Defuse[80607:1c403] BG UP 1.000000
2012-06-13 18:45:36.542 Bomb Defuse[80607:1c403] BG UP 1.000000
2012-06-13 18:45:36.717 Bomb Defuse[80607:1c403] BG UP 1.000000
2012-06-13 18:45:36.897 Bomb Defuse[80607:1c403] BG UP 1.000000
2012-06-13 18:45:37.599 Bomb Defuse[80607:1c403] BG DOWN1.000000
2012-06-13 18:45:37.602 Bomb Defuse[80607:1c403] BG DOWN0.900000
2012-06-13 18:45:38.431 Bomb Defuse[80607:1c403] BG DOWN0.900000
2012-06-13 18:45:38.491 Bomb Defuse[80607:1c403] BG DOWN-0.100000
2012-06-13 18:45:38.617 Bomb Defuse[80607:1c403] BG DOWN-0.100000
2012-06-13 18:45:38.951 Bomb Defuse[80607:1c403] BG DOWN-0.100000
2012-06-13 18:45:39.125 Bomb Defuse[80607:1c403] BG DOWN-0.100000
2012-06-13 18:45:39.479 Bomb Defuse[80607:1c403] BG DOWN-0.100000
2012-06-13 18:45:39.908 Bomb Defuse[80607:1c403] BG DOWN-0.100000
2012-06-13 18:45:40.399 Bomb Defuse[80607:1c403] BG DOWN-0.100000
2012-06-13 18:45:40.624 Bomb Defuse[80607:1c403] BG DOWN-0.100000
2012-06-13 18:45:40.841 Bomb Defuse[80607:1c403] BG DOWN-0.100000
2012-06-13 18:45:41.059 Bomb Defuse[80607:1c403] BG DOWN-0.100000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-13 22:41:32

浮点运算是不准确的--从1.0开始,减去0.1 10次并不一定能给出精确的0.0。有关更多细节,请阅读经典报纸关于浮点算法,每个计算机科学家应该知道什么?

在更改值时,可以将值限制为[0.0, 1.0],避免严格的等式比较(例如,使用>=<=而不是==),或者--理想情况下--将卷存储为0到10之间的整数,并在需要时除以10.0。

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

https://stackoverflow.com/questions/11024339

复制
相关文章

相似问题

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