Python: разделение денежной стоимости (представленной в виде десятичной дроби с 2 значащими знаками) на X равных частей

#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 @PawelRoman

2. Так ли это? Это был результат, который я получил для 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 and n=4 : он дает [0.03, 0.01, 0.01, 0.01]