lirui11
现在我(角色名16380)的头上戴着一个增加29%移动速度的头颅
头颅的指令

我输入了
  1. /data get entity @s Inventory[{Slot:103b}].tag.AttributeModifiers[{AttributeName:"generic.movementSpeed"}].Amount
复制代码
输出0.29d
接着我输入了
  1. /data get entity @s Inventory[{Slot:103b}].tag.AttributeModifiers[{AttributeName:"generic.movementSpeed"}].Amount 100
复制代码
输出28

什么情况……


测试时Amount的值从0.0d到0.29d 只有0.29d异常输出28 其他都是正常的
0.39d也会正常输出39
鬼知道我是怎么发现这个的

BugMJ?



爱心魔王FHC
我试了下,
0.29
乘以1是0
乘以10是2
乘以100是28
乘以101是29
乘以1000是290
总结:BUGMOJANG

lirui11
本帖最后由 lirui11 于 2019-8-13 22:35 编辑

看来真的是BugMojang了…
不过我担心如果换成101的话会对我那个函数造成什么影响
算了直接单独处理吧^
不知道后面还有没有这样类似的bug数,一个不用穷举的函数也需要穷举bug数的这一天终于到来了


爱心魔王FHC
lirui11 发表于 2019-8-13 22:32
看来真的是BugMojang了…
不过我担心如果换成101的话会对我那个函数造成什么影响
算了直接单独处理吧^

刚刚试了一圈好像就29

SPGoding
这并非 Mojang 的问题,而是浮点数的固有缺陷。有兴趣可以看这篇文章:https://zhuanlan.zhihu.com/p/28162086


不止 Java 如此,绝大多数编程语言都使用 IEEE 754 标准表示浮点数,都会有这个问题。例如你现在按 F12 打开浏览器的 Console,在里面输入 0.29 * 100 并回车,得到的也是 28.999999999999996。


而 Minecraft 命令系统会把 Double 或 Float 转换为 Int,即直接舍弃末位,所以最终结果为 28。

chyx
FHC红石 发表于 2019-8-13 22:43
刚刚试了一圈好像就29

建议再试一试以下这些数

29
57
58

顺便,许多情况下,0.1+0.2==0.30000000000000004
有人特意做了一个网站http://0.30000000000000004.com/
列举了关于这个现象的许多情况。

浮点数就是这样的。要是不喜欢的话那就气死好了。

第一页 上一页 下一页 最后一页