地板到numpy中最接近0.2的倍数?

Flooring to nearest multiple of 0.2 in numpy?

如何在 numpy 中将数字下限到最接近的 0.2 的倍数?

例如,我有这个:

0.2 * np.floor(xi / 0.2)

大部分时间都有效,例如

>>> xi = 9.4
>>> 0.2 * np.floor(xi / 0.2)
9.4

但是,它对某些数字失败,例如 9.6

>>> xi = 9.6
>>> 0.2 * np.floor(xi / 0.2)
9.4

我希望之前的计算结果为 return 9.4。

我该如何解决这个问题?

使用np.round

0.2 * np.round(xi / 0.2)

输出:

9.600000000000001

额外的一点是由于浮点数学。

这是因为 float 格式 - 注意 9.6/0.2 returns 47.9999999....

在这里和那里进行一些舍入就可以了:

round(0.2*np.floor(round(xi / 0.2,2)),1)

内部四舍五入保留 2 位小数,以确保您不会失去精度,并且仍然会有一些不足之处。 外圆是 - 所以你将有适当的四舍五入到 0.2 (而不是例如 9.6000...1