Python - округление на четверть интервала - PullRequest
16 голосов
/ 14 ноября 2011

Я сталкиваюсь со следующей проблемой:

Учитывая различные числа, такие как:

10.38

11.12

5.24

9.76

существует ли уже встроенная функция для округления их до ближайшего шага 0,25, например, например:

10,38 -> 10.50

11.12 ->11,00

5,24 -> 5,25

9,76 -> 9-75?

Или я могу пойти дальше и собрать вместе функцию, которая выполняет нужную задачу?

Заранее спасибо и

с наилучшими пожеланиями

Дан

Ответы [ 4 ]

29 голосов
/ 14 ноября 2011

Это решение общего назначения, которое позволяет округлять до произвольных разрешений.Для вашего конкретного случая вам просто нужно предоставить 0.25 в качестве разрешения, но возможны и другие значения, как показано в тестовых примерах.

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

print "Rounding to quarters"
print roundPartial (10.38, 0.25)
print roundPartial (11.12, 0.25)
print roundPartial (5.24, 0.25)
print roundPartial (9.76, 0.25)

print "Rounding to tenths"
print roundPartial (9.74, 0.1)
print roundPartial (9.75, 0.1)
print roundPartial (9.76, 0.1)

print "Rounding to hundreds"
print roundPartial (987654321, 100)

Это выводит:

Rounding to quarters
10.5
11.0
5.25
9.75
Rounding to tenths
9.7
9.8
9.8
Rounding to hundreds
987654300.0
27 голосов
/ 14 ноября 2011
>>> def my_round(x):
...  return round(x*4)/4
... 
>>> 
>>> assert my_round(10.38) == 10.50
>>> assert my_round(11.12) == 11.00
>>> assert my_round(5.24) == 5.25
>>> assert my_round(9.76) == 9.75
>>> 
5 голосов
/ 14 ноября 2011

Встроенной функции нет, но такую ​​функцию написать тривиально

def roundQuarter(x):
    return round(x * 4) / 4.0
2 голосов
/ 27 августа 2015

Решение paxdiablo может быть немного улучшено.

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

, поэтому функция теперь «чувствительна к типу данных».

...