向下舍入为浮点值的5因子值

时间:2014-11-17 07:35:57

标签: python

我想将浮点值转换为向下舍入5因子值,这意味着例如0.05,0.10,0.15

假设我的值为9.48,我想将其转换为9.45

我试过这个:

val = 9.48
val - val % 0.05

返回9.450000000000001。这对我有好处,但问题是当我9.60时,它会转换为9.55

当该值已经是因子5时,它保持不变。

2 个答案:

答案 0 :(得分:6)

你可以做这种事

>>> val = 9.68
>>> round(val*20)/20.0
9.6999999999999993

答案 1 :(得分:1)

这是how floating point numbers are represented的结果 - 浮点数无法准确表示9.60。与9.6最接近的(64位)浮点数略低于9.6,这就是操作向下舍入的原因。如果您需要精确的数学运算,那么您应该使用decimal模块而不是float

例如

val = decimal.Decimal("9.60")
val - val % decimal.Decimal("0.05")

有关浮点数学的深入解释,请参阅https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html