查看: 62|回复: 3

[交流讨论] 某段数值取整bug

[复制链接]
梦石
0
星屑
42280
在线时间
6019 小时
注册时间
2006-11-10
回帖
6968
发表于 前天 10:21 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 灯笼菜刀王 于 2026-10-15 10:24 编辑

事件起因

经过不严谨测试, 发现数值在 512.0002 ~ 538.0002 之间,  p (X * 10000).to_i  其个位数会变成1 并不是2 ;
注, 小数部分固定为X.0002,   X.0001和X.0003都正常

未标题-1.jpg

目前发现XP(1.03)和VA(1.00)都有这个问题, 这是啥原因?

梦石
1
星屑
23276
在线时间
9566 小时
注册时间
2012-6-19
回帖
7020

开拓者短篇九导演组冠军

发表于 昨天 11:14 来自手机 | 显示全部楼层
p a * 10000 看看结果是不是 5120001.999999999
回复

使用道具 举报

梦石
0
星屑
42280
在线时间
6019 小时
注册时间
2006-11-10
回帖
6968
 楼主| 发表于 昨天 15:45 | 显示全部楼层
喵呜喵5 发表于 2026-10-16 11:14
p a * 10000 看看结果是不是 5120001.999999999

没错, VA的结果是 5120001.99999999  
511.0002 则会是 5110002.0
但如果是XP(1.03J), 结果是 5120002 变成整数而不是浮点, 511.0002 则正常p出 5110002.0

从变成5120001.99999999 是可以看出为什么取整后个位是1的原因, 但是问题还是一样, 为什么512会, 511就不会,摊手
回复

使用道具 举报

梦石
1
星屑
23276
在线时间
9566 小时
注册时间
2012-6-19
回帖
7020

开拓者短篇九导演组冠军

发表于 昨天 18:17 | 显示全部楼层
灯笼菜刀王 发表于 2026-10-16 15:45
没错, VA的结果是 5120001.99999999  
511.0002 则会是 5110002.0
但如果是XP(1.03J), 结果是 5120002 变 ...


就是浮点数精度问题,然后 to_i 取整是裁掉小数部分不是四舍五入,所以 .999 直接给你裁到 0 了
避开浮点数
("512.0002".to_r * 10000).to_i
(512.0002 * 10000 +0.0001).to_i
或者四舍五入都能解决

你真想知道底层原因直接找AI问浮点数精度都能给你解释
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部