我需要取0.405的数字并将其四舍五入到0.40,同时将0.412变为0.42。有没有内置函数来做到这一点?
答案 0 :(得分:4)
一个通用解决方案,这允许舍入到任意分辨率(当然,除了零之外,但是零分辨率没有意义(a)) 。对于您的情况,您只需要提供0.02
作为分辨率,但其他值也是可能的,如测试用例中所示。
# This is the function you want.
def roundPartial (value, resolution):
return round (value / resolution) * resolution
# All these are just test cases, the first two being your own test data.
print "Rounding to fiftieths"
print roundPartial (0.405, 0.02)
print roundPartial (0.412, 0.02)
print "Rounding to quarters"
print roundPartial (1.38, 0.25)
print roundPartial (1.12, 0.25)
print roundPartial (9.24, 0.25)
print roundPartial (7.76, 0.25)
print "Rounding to hundreds"
print roundPartial (987654321, 100)
输出:
Rounding to fiftieths
0.4
0.42
Rounding to quarters
1.5
1.0
9.25
7.75
Rounding to hundreds
987654300.0
(a)如果您有需要的特定人格障碍您可以处理这种可能性,请注意您是在最接近的数字之后您所需的分辨率。由于最接近N
的数字(对于任何 N
)是0的倍数,因此您可以按如下方式修改函数:
def roundPartial (value, resolution):
if resolution == 0:
return 0
return round (value / resolution) * resolution
或者,您可以保证自己不要将零作为分辨率传递: - )
答案 1 :(得分:0)
对早期解决方案的一个小修复:
def roundPartial (value, resolution):
return round (float(value) / resolution) * resolution
此前
roundPartial(19, 10) = 10.0
使用修复
roundPartial(19, 10) = 20.0