Округление до любого заданного значения python - PullRequest
0 голосов
/ 30 мая 2018

У меня есть список, который содержит значения, сгенерированные случайным образом.Каждое значение этого списка соответствует одному конкретному параметру, такому как расстояние, время и так далее.Я создал функцию, которая округляет каждое значение этого списка до количества цифр, введенных пользователем:

def round_list(list_x):
    for i in range(0, len(list_x)):
        incrementer = raw_input('Enter the increment value: ')
        list_x[i] = np.round(list_x[i], int(incrementer))
    return list_x

x = round_list(x)
print(x)

Но это будет работать только для правильной установки десятичных знаков?Что, если пользователь хочет, чтобы оно было округлено до каждого 0.25 или каждого 0.03?Как бы я это включил?Я не думаю, что round() может это сделать.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Попробуйте это:

def round(number, nearest):

    if ((number % nearest) / nearest) < 0.5:
        return (number - (number % nearest))
    else:
        return ((number - (number % nearest)) + nearest)

Объяснение:

if проверяет, меньше ли разница между числом и самым предыдущим кратным nearest меньше половины nearest.Если это так, это означает, что число необходимо округлить в меньшую сторону, поэтому, если оно равно True, возвращается самое предыдущее значение, кратное nearest.Если это False, он возвращает (самый предыдущий кратный nearest) + nearest.

0 голосов
/ 30 мая 2018

Округление до ближайшего дробного значения (скажем, 0,25) может быть выполнено путем деления на дробь, затем округления до ближайшего целого числа, а затем умножения на дробь.

Примерно так:

def roundToBase(num, base):
    return np.round(float(num) / base, 0) * base

print(roundToBase(1.3,0.25)) # 1.25

# also works for non-fractional bases,
# eg round to nearest multiple of 5:
print(roundToBase(26,5)) # 25
...