2

我需要取一个像 0.405 这样的数字并将其舍入为 0.40,同时将 0.412 舍入为 0.42。是否有任何内置功能可以做到这一点?

4

2 回答 2

5

通用解决方案,这允许舍入到任意分辨率(当然,除了零之外,但零分辨率几乎没有意义(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(对于任何 N0 的倍数)的数字始终为 0,因此您可以按如下方式修改函数:

def roundPartial (value, resolution):
    if resolution == 0:
        return 0
    return round (value / resolution) * resolution

或者,您可以简单地向自己保证不会通过零作为解决方案:-)

于 2013-07-15T01:27:06.483 回答
0

对早期解决方案的一个小修复:

def roundPartial (value, resolution):
    return round (float(value) / resolution) * resolution

早些时候

roundPartial(19, 10) = 10.0

带修复

roundPartial(19, 10) = 20.0
于 2017-08-29T11:51:03.653 回答