我想将浮点值转换为向下舍入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时,它保持不变。
答案 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。