我希望将一个浮点值转换为5因子值,这意味着例如0.05,0.10,0.15。
假设我有一个类似于9.48的值,并希望将其转换为9.45。
我试过用这个:
val = 9.48
val - val % 0.05它返回9.450000000000001。这对我有好处,但问题是当我有9.60时,它会将asn转换为9.55。
当该值已为5的因数时,它将保持原样。
发布于 2014-11-17 07:42:10
你可以做这种事
>>> val = 9.68
>>> round(val*20)/20.0
9.6999999999999993发布于 2014-11-17 08:03:02
这是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")有关浮点数学的深入解释,请参见goldberg.html。
https://stackoverflow.com/questions/26967667
复制相似问题