设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2918|回复: 4
打印 上一主题 下一主题

[已经解决] 小数问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
帖子
590
跳转到指定楼层
1
发表于 2013-5-22 18:59:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 wbsy8241 于 2013-5-26 03:42 编辑

我在脚本中使用每帧+0.2 但多次计算后结果会变x.9999999999 或 x.000000001
  1. 1000.times.inject(0.0){|r,i|
  2. Graphics.update
  3. p Graphics.frame_count.to_s + "    " + r.to_s
  4. r + 0.2
  5. }
复制代码


请问为什么会变成这样


导致的BUG:

例:由于坐标 27.9999999996 != 28
所以有1帧未移动 导致移动时候每到1个格子停下来1帧
画面出现卡顿现象

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

2
发表于 2013-5-22 19:15:56 | 只看该作者
这是浮点运算的bug。
  1. 0.1 + 0.2 #=> 0.300000.....04
复制代码
使用 round 函数吧,精度应该不需要要那么高的。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
帖子
590
3
 楼主| 发表于 2013-5-22 19:24:04 | 只看该作者
Sion 发表于 2013-5-22 19:15
这是浮点运算的bug。使用 round 函数吧,精度应该不需要要那么高的。


我要判断是不是到了1整格 怎么能用round呢
那启不是我永远走不出第一格了...(0.2).round = 0
或者走了1半瞬移到下一格

用默认的公式 + 2**x / 256.0
完全没问题啊
一直是 0.125 0.25 0.375 0.5 不会出现那么长的.99999或.000001

点评

对所有浮点数计算都这样吗= = 或者 要是必须要小数的怎么办比如1/3  发表于 2013-5-22 19:40
.round(5) 里面设置个合适的数  发表于 2013-5-22 19:30
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

4
发表于 2013-5-22 19:50:13 | 只看该作者
wbsy8241 发表于 2013-5-22 19:24
我要判断是不是到了1整格 怎么能用round呢
那启不是我永远走不出第一格了...(0.2).round = 0
或者走了1半 ...
  1. 0.2.round(5)          #=> 0.2
  2. 0.2000000001.round(5) #=> 0.2
复制代码

点评

你先搞清楚 round(x) 这个函数的作用.  发表于 2013-5-22 20:06
现在是5帧走完1格 3帧走完 就不适用了 0.33333 * 3 = 0.99999  发表于 2013-5-22 19:57
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
帖子
590
5
 楼主| 发表于 2013-5-26 03:41:27 | 只看该作者
  0.20000001.round(5)
=0.2000│0001
=0.2000
=0.2

  0.19999999.round(5)
=0.1999│9999
=0.2000
=0.2


  0.33333333.round(5)
=0.3333|3333
=0.3333

  (0.3333+0.33333333).round(5)
=0.666633333333.round(5)
=0.6666|3333
=0.6666

  (0.6666+0.33333333).round(5)
=0.999933333333.round(5)
=0.9999|3333
=0.9999

  (0.9999+0.33333333).round(5)
=1.333233333333.round(5)
=1.3332|3333
=1.3332

点评

判断的时候再 round 。- -b  发表于 2013-5-27 23:31
没的认可 也没人回就算了 百度了这不是RUBY特有的问题解决不了.  发表于 2013-5-27 20:52
你自己搞定了? - -b  发表于 2013-5-26 09:19
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-18 14:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表