我正在将一个存储库从ruby版本2.3.3升级到2.5.1。测试失败,我已将原因缩小到以下行为:
In version 2.3.31.34875.round(4)=> 1.3487
In version 2.5.11.34875.round(4)=> 1.3488
现在,我知道this change,但我不认为这是相关的,因为a)默认行为是单独存在的,b)观察到的更改与建议的默认更改相反。我也知道浮点数不是精确存储有限小数的好方法,精度的一些变化可能解释了为什么会发生这种变化。但我不知道,我也不知道怎么知道。

最佳答案

您描述的行为听起来像https://bugs.ruby-lang.org/issues/13138,它被认为是一个错误修复程序,并被移植到2.3.5。(我还没有确认哪个2.4.x是后端口的,如果有的话,但它在2.5.0之前就在主干中了。)
正如你所猜测的,这是一个精确的问题。1.34875的浮点表示略小于1.34875,因此2.3.3做了技术上过分正确的事情并向下舍入;较新版本认识到,考虑到浮点实际上表示一系列值(包括1.34875),向上舍入更为一致。

07-27 22:10