Просто суммируем все, что написано в комментариях:
Если вы используете сложный процент , ваша функция экспоненциальная, а не линейная. Это означает, что разделение годовой ставки не поможет.
Вам следует подумать о том, что ежемесячный сложный процент, применяемый 12 раз, будет таким же, как и весь год. Это в форме уравнения будет выглядеть примерно так:
yearly = monthly **12 # Because this is compound there is an exponential
# That´s equivalent to
monthly = yearly ** (1/12)
Так что вам просто нужно изменить расчет ежемесячного процента.
intrest_rate_per_month = ((intrest_rate_per_year / 100) + 1) ** (1/12)
И окончательный код с правильным результатом
kapital_from_start = 50000.00
intrest_rate_per_year = 10.00
intrest_rate_per_month = ((intrest_rate_per_year / 100) + 1) ** (1/12)
additional_monthly_increase = 00.00
duration_in_years = 5.0
duration_in_months = duration_in_years * 12.0
i = 1
result = 0.0
while i <= duration_in_months:
if i == 1: #First month.
result = kapital_from_start * (intrest_rate_per_month)
else:
result *=intrest_rate_per_month
i += 1
print("\n\n######################################################\n")
print("Resulting kapital: " + str(result) + " $.")
print("\n######################################################\n\n")
Очистка кода
Также учтите, что вы можете просто сделать не итеративное решение, избавиться от него, пока l oop, поэтому этот кусок кода:
result = kapital_from_start * (intrest_rate_per_month) ** duration_in_months
Избавляется от всего этого целого, пока l oop:
i = 1
result = 0.0
while i <= duration_in_months:
if i == 1: #First month.
result = kapital_from_start * (intrest_rate_per_month)
else:
result *=intrest_rate_per_month
i += 1
С окончательным кодом, результатом которого будет:
kapital_from_start = 50000.00
intrest_rate_per_year = 10.00
intrest_rate_per_month = ((intrest_rate_per_year / 100) + 1) ** (1/12)
additional_monthly_increase = 00.00
duration_in_years = 5.0
duration_in_months = duration_in_years * 12.0
result = kapital_from_start * (intrest_rate_per_month) ** duration_in_months
print("\n\n######################################################\n")
print("Resulting kapital: " + str(result) + " $.")
print("\n######################################################\n\n")
##### ##################################################
Результирующий капитал: 80525.50000000012 $.
################################################### ###
Также ваше соглашение об именах выглядит для меня многословным, но это похоже на еще одну проблему.
EDIT : Извините за этот ответ тоже долго, но на случай, если кто-то придет сюда с той же проблемой и не поймет, что происходит, я нашел хороший график из Википедии, который иллюстрирует совершенство почему ваш код был неправильным.