#python
#python
Вопрос:
У меня следующая проблема: у меня есть десятичное значение, представляющее деньги, с 2 знаками после запятой. Мне нужно разделить ее на X равных частей, также представленных в виде десятичных знаков с 2 знаками после запятой.
Пример 1: разделение 1,04 (1 доллар и 4 цента) на 3 равные части должно дать: 0,35, 0,35, 0,34
Пример 2: разделение 0,01 (1 цента) на 3 равные части должно дать: 0,01, 0,00, 0,00
и так далее.
Комментарии:
1. что вы пробовали до сих пор?
Ответ №1:
Я предлагаю вам использовать целочисленное деление, чтобы найти результат. Вот пример, который я нахожу легко читаемым:
def func(money,n):
q = round(((money * 100) // n) / 100, 2) # quotient
r = int(money * 100 % n) # remainder
q1 = round(q 0.01, 2) # quotient 0.01
result = [q1] * r [q] * (n-r)
return result
print(func(1.04,3)) # [0.35, 0.35, 0.34]
print(func(0.01,3)) # [0.01, 0.0, 0.0]
Комментарии:
1. Для тех, кто может использовать этот ответ, имейте в виду, что он может не работать для некоторых значений с плавающей запятой, например
0.29
, где он возвращается[0.14, 0.14]
, но так и должно быть (без учета порядка)[0.14, 0.15]
.
Ответ №2:
Это должно вам помочь:
money = 1.04
n = 3
lst = []
divided = round(money/n,2)
for x in range(n):
if sum(lst) == money:
lst.append(0.0)
elif x == n-1:
lst.append(round(money-sum(lst),2))
else:
lst.append(divided)
lst.sort(reverse=True)
print(lst)
Вывод:
[0.35, 0.35, 0.34]
Комментарии:
1. Извините, но это не работает, например, с
money = 0.04
иn = 4
@PawelRoman2. Так ли это? Это был результат, который я получил для
money = 0.04
иn = 4
:[0.01, 0.01, 0.01, 0.01]
3. упс, я допустил ошибку. Я хотел написать, что это не работает с
money = 0.04
иn = 6
. Я получил результат:[0.01, 0.01, 0.01, 0.01, 0.01, -0.01]
4. О да. Спасибо, что указали на ошибку! Я отредактировал свой код. Проверьте, правильно ли работает моя отредактированная версия кода.
5. Он по-прежнему не работает, например, с
money=0.06
andn=4
: он дает[0.03, 0.01, 0.01, 0.01]