转载请保留此信息:http://blog.csdn.net/jmppok/article/details/17303243
最近养老金很火:什么?养老金不够用了,要延迟退休!
大家每个月都要缴纳一大笔养老保险金,个人+单位可能有几千块。我不禁会想:现在每个月缴这么多钱,以后等我退休了,一个月能能拿到多少呢?
当然这个问题目前还是个谜。说到底到时候可能还是国家说了算,给你发多少就是多少。
可是最为一个吊丝程序员,对该问题却十分关注。下面试图通过一个小程序来模拟算一下,一个中国人一生需要缴纳多少养老金,以及退休后,每个月能领到多少钱?
1)每个人缴纳数是随工资增长的,但是也有一个高限(上一年本市平均工资的3倍的28%),当然平均工资也是会随年增长的。
设定一:我以GDP的增长速度来代替平均工资的增长速度,并且设定为7%。
2)大家都知道养老金是退休了以后才能领取的,没退休之前,钱是存在银行的,而这时候是要算利息的。
设定二:取目前5年期的定存利率作为计算利率, 目前为4.75%
1)假设25岁工作,工作时工资为8000元,每个月个人+单位缴养老金1920元。60岁退休,90岁Over,领30年养老金。则情况如下:
到时每月领取46358元。
2)如果延迟至65岁退休,则情况如下:
到时每月领取79972元。(多缴了5年,少领了5年)
3)比如我是工作4年,今年30,现在缴4200左右,估计到时候65退休。情况如下:
到时每月领108936元。好多阿....
假设GDP增速7%,CPI增速3%
30年后,10000元增长17倍,退休的时候每月拿10W元,才相当于现在的6000元。
Python2.7
1)养老金计算代码,c1.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
#月缴纳金额(个人+单位)
Money_now = 0
#退休后月领取金额
Money_retire = 0
#参加工作年龄,预定义为22
Age_work = 25
#现在年龄(输入)
Age_now = 0
#退休年龄,预定义为60
Age_retire = 65
#死亡年龄,预定义为90
Age_die = 90
#银行利息,用于计算养老金利息
Bank_rate=0.0475
#GDP增长,用于计算每月养老金的增加金额
GDP_rate=0.07
#计算分为两步:
#1.计算总缴纳,包括以前缴的和以后缴的,每年计息;
#2.计算月领取数,领取时余额每年计息;
def calc(age,money):
Age_now=int(age)
Money_now=int(money)
Y_before= Age_now-Age_work
Y_total = Age_retire - Age_work
M_first = Money_now*(1-GDP_rate)**Y_before
R_gdp = 1+GDP_rate;
R_bank = 1+Bank_rate;
#计算总缴纳额
# Y_total-1
#SUM=∑(M_first*12*(R_gdp)**k)*(R_bank)**(Y_total-k)
# k=0
#即
# Y_total-1
#SUM=∑(12*M_first*(R_bank)**Y_total)*(R_gdp/R_bank)**(k)
# k=0
#使用等比数列求和 Sn=a1(1-q^n)/(1-q)
q=R_gdp/R_bank
SUM=12*M_first*((R_bank)**(Y_total))*(1-q**Y_total)/(1-q)
print Age_work,"参加工作,",Age_retire,"退休","退休时有养老金",SUM
#下面计算领取
Y_draw=Age_die-Age_retire
# 假设刚好领完,每年计息
# Y_draw-1
# ∑(SUM-Money_retire*12*k)*(R_bank)**(Y_draw-k)=12*Money_retire*Y_draw
# k=0
#Y=12Money_retire
#M=(R^(n+1)-(n+1)R+n)/(R^n*(R-1)^2)
#Y=(S*(R^N-1))/((R-1)*(R^n*M+N))
M=(R_bank**(Y_draw+1)-(Y_draw+1)*R_bank+Y_draw)/(R_bank**Y_draw * (R_bank-1)**2)
Y=(SUM*(R_bank**Y_draw-1))/((R_bank-1)*(R_bank**Y_draw*M+Y_draw))
Money_retire = Y/12
print Age_die,"死亡,领取",Y_draw,"年,每月",Money_retire
if __name__=='__main__':
if(len(sys.argv)<3):
print "Usage: c.py age money"
else:
calc(sys.argv[1],sys.argv[2])
代码分析:主要是两个数学计算公式。
a.缴费计算
# Y_total-1
#SUM=∑(M_first*12*(R_gdp)**k)*(R_bank)**(Y_total-k)
# k=0
b.领取计算
# Y_draw-1
# ∑(SUM-Money_retire*12*k)*(R_bank)**(Y_draw-k)=12*Money_retire*Y_draw
# k=0
2)物价上涨计算代码
#!/usr/bin/python
# -*- coding: utf-8 -*-
GDP_rate=0.07
CPI_rate=0.03
i=5
while(i<65):
print "10000, ",i," Years late : ",10000*(1+GDP_rate+CPI_rate)**i
i+=5
欢迎大家批评指正!
少年们,考公务员吧!